内容简介:JVM内存模型解析
JVM内存模型可以分为两个部分,如下图所示,堆和方法区是所有线程共有的,而虚拟机栈,本地方法栈和程序计数器则是线程私有的。下面我们就来一一分析一下这些不同区域的作用。
堆内存
堆内存是所有线程共有的,可以分为两个部分:年轻代和老年代。下图中的 Perm
代表的是永久代,但是注意永久代并不属于堆内存中的一部分,同时jdk1.8之后永久代也将被移除。
GC(垃圾回收器)对年轻代中的对象进行回收被称为 Minor GC
,用通俗一点的话说年轻代就是用来存放的年轻的对象,年轻对象是什么意思呢?年轻对象可以简单的理解为没有经历过多次垃圾回收的对象,如果一个对象经历过了一定次数的 Minor GC
,JVM一般就会将这个对象放入到年老代,而VM对年老代的对象的回收则称为 Major GC
。
如上图所示,年轻代中还可以细分为三个部分,我们需要重点关注这几点:
- 大部分对象刚创建的时候,JVM会将其分布到
Eden
区域。 - 当
Eden
区域中的对象达到一定的数目的时候,就会进行Minor GC
,经历这次垃圾回收后所有存活的对象都会进入两个Suvivor Place
中的一个。 - 同一时刻两个
Suvivor Place
,即s1
和s2
中总有一个总是空的。 - 年轻代中的对象经历过了多次的垃圾回收就会转移到年老代中。
对于永久代的描述,虽然在jdk1.8之后将不再存在,但是我们还是稍微了解一下,直接引用官方文档中的一段描述,可以得知永久代中主要存放的是JVM自身所需要的一些额外的关于对象的信息。
The permanent generation is special because it holds data needed by the virtual machine to describe objects that do not have an equivalence at the Java language level. For example objects describing classes and methods are stored in the permanent generation.
方法区
方法区与 Java 堆一样,是各个线程共享的区域,它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译(JIT)后的代码等数据。
对于JDK1.8之前的HotSpot虚拟机而言,很多人经常将方法区成为我们上图中所描述的永久代,实际上两者并不等价,因为这仅仅是HotSpot的设计团队选择利用永久代来实现方法区而言。同时对于其他虚拟机比如IBM J9中是不存在永久代的概念的。
常量池其实是方法区中的一部分,因为这里比较重要,所以我们拿出来单独看一下。注意我们这里所说的运行时的常量池并仅仅是指Class文件中的常量池,因为JVM可能会进行即时编译进行优化,在运行时将部分常量载入到常量池中。
程序计算器
JVM中的程序计算器和计算机组成原理中提到的程序计算器PC概念类似,是线程私有的,用来记录当前执行的字节码位置。还是稍微解释一下吧,CPU的占有时间是以分片的形式分配给给每个不同线程的,从操作系统的角度来讲,在不同线程之间切换的时候就是依赖程序计数器来记录上一次线程所执行到具体的代码的行数,在JVM就是字节码。
Java虚拟机栈
与程序计数器一样,Java虚拟机栈也是线程私有的,用通俗的话将它就是我们常常听说到堆栈中的那个“栈内存”。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表(局部变量表需要的内存在编译期间就确定了所以在方法运行期间不会改变大小。
),操作数栈,动态链接,方法出口等信息。每一个方法从调用至出栈的过程,就对应着栈帧在虚拟机中从入栈到出栈的过程。p.s: 关于栈帧这里我们以后讲虚拟机字节码执行引擎的时候再来仔细分析。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 谷歌BERT模型深度解析
- JStorm 源码解析:基础线程模型
- Kafka 源码解析:网络交互模型
- VGG卷积神经网络模型解析
- HBase数据模型解析和基本的表
- 《Elasticsearch 源码解析与优化实战》样章-第 6 章 数据模型
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
黑客大曝光
Joel Scambray、Vincent Liu、Caleb Sima / 姚军 / 机械工业出版社华章公司 / 2011-10 / 65.00元
在网络技术和电子商务飞速发展的今天,Web应用安全面临着前所未有的挑战。所有安全技术人员有必要掌握当今黑客们的武器和思维过程,保护Web应用免遭恶意攻击。本书由美国公认的安全专家和精神领袖打造,对上一版做了完全的更新,覆盖新的网络渗透方法和对策,介绍如何增强验证和授权、弥补Firefox和IE中的漏洞、加强对注入攻击的防御以及加固Web 2.0安全,还介绍了如何将安全技术整合在Web开发以及更广泛......一起来看看 《黑客大曝光》 这本书的介绍吧!