jvm内存结构的原理及应用

发布时间:2021-06-23 13:43:07 作者:chen
来源:亿速云 阅读:165

这篇文章主要讲解了“jvm内存结构的原理及应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“jvm内存结构的原理及应用”吧!

jvm内存结构概述

jvm内存结构的原理及应用
  jvm内存结构主要包括:方法区、堆、虚拟机栈、本地方法栈、程序计数器等五大部分, 下面我们来具体看一下每一个部分。

1.1 虚拟机栈

  以methodA调用methodB为例,来看一下方法栈的执行过程 jvm内存结构的原理及应用
首先是主方法进入空栈(图中免去了这一步),主方法中调用methodA --》 methodA入栈 --》 methodA调用methodB --》 methodB入栈 --》 methodB执行完毕,出栈并返回返回值 --》 methodA执行完毕,出栈并返回返回值 --》主线程执行完毕并出栈(图中免去了这一步)--》程序执行完毕。
  那么methodA、methodB中到底包含了哪些内容呢?
  我们不如从方法定义的角度来思考一下,编写程序时,里面经常出现的几个要素无外乎:变量、控制结构(循环、分支)、函数调用(也可以叫方法),函数其实就是用一定的控制结构来操作变量,中间穿插着其他函数的调用,分支结构主要控制的是程序执行到哪一行,这个由我们后面1.5章节要讲到的程序计数器来实现,函数调用层次如上面所说由虚拟机栈来支持,而变量以及方法的出口就是methodA、methodB中的主要内容。
  methodA、methodB在虚拟机栈中叫做栈帧,栈帧中包括变量(局部变量表-基本类型、对象引用-对象内存地址等)以及返回值地址等信息,可以看出栈帧中包含的内容是编译器就可确定大小的,当进入一个方法时,需要分配多大的局部变量空间是完全确定的,在运行期中不会改变局部变量表的大小。

1.2 本地方法栈

1.3 堆

1.4 方法区

1.5 程序计数器

1.6 线程共享区与线程独占区

  上面五个区域中,方法区和堆是线程共享的区域,这两个区域中放置的内容是与线程无关的,任意一个线程都可能会访问到这两块区域中的内容。
  对于每个线程来说,它的调用方法栈应该是独属于某个线程的,如果多个线程共用一个方法栈那程序的执行顺序是无法得到保障的,线程执行到哪一行应该也是唯一的,因此方法栈、程序计数器是线程独占的。

感谢各位的阅读,以上就是“jvm内存结构的原理及应用”的内容了,经过本文的学习后,相信大家对jvm内存结构的原理及应用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. JVM 内存结构
  2. JVM内存结构划分的示例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jvm

上一篇:docker Swarm 中怎么在docker-compose使用变量

下一篇:管理Hadoop的方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》