【JVM笔记】运行时数据区(内存结构)

以下为JDK1.8版本虚拟机运行时数据区的相关总结(OneNote截图)。

文章目录结构:

线程共享区域

     1 方法区

            1.1 运行时常量池(Runtime Constant Pool)

            1.2 元空间实现方法区

     2.堆(Heap) 

            2.1 新生代(Young Generation)

            2.2 老年代(Old Generation) 

            2.3 元空间(Meta Space) 

            2.4 字符串常量池(String Pool)

线程不共享区域

     3.虚拟机栈(Stack) 

            3.1 局部变量表

            3.2 操作数栈(Operand Stack)

            3.3 动态链接和指向运行时常量池的引用

            3.4 方法返回地址

    4.本地方法栈(Native Method Stack) 

    5.程序计数器(Program Counter Register) 

更正:

上文对新生代中进行GC的过程描述有歧义,重新更正一下 。

对象在From SurvivorTo Survivor来回转移的详细过程

对象在Eden区创建,当Eden区第一次装满之后,会执行第一次Yong GC,第一次Yong GC会将伊甸区还存活的对象复制到Surviver区的“From”区,此时“To”区是空的。但是在以后伊甸区被装满后进行的Yong GC,会将Eden区还存活的对象直接移动到Surviver区的“To”区,而“Form”区的对象有两个去处,“From”区的对象会根据经过的GC次数计算年龄,如果年龄到达了阈值(默认15),则会被移动到老年代中,否则就转移到“To”区,此时“From”区变成了空的,然后“From”区和“To”区进行角色互换,也就是新的“To”就是上次GC前的“From”,新的“From”就是上次GC前的“To”。到下一次进行GC时,还是有一块空的“To”区,用来存放从eden区和“From”区移动过来的对象。也就是不管怎样,都会保证名为To的Survivor区域是空的。Yong GC会一直重复这样的过程,直到“To”区被填满,“To”区被填满之后,会将所有对象移动到年老代中。 

全部评论

相关推荐

昨天 11:15
中南大学 Java
好可爱的hr姐姐哈哈哈哈
黑皮白袜臭脚体育生:兄弟们貂蝉在一起,吕布开了
点赞 评论 收藏
分享
06-19 19:06
门头沟学院 Java
码农索隆:别去东软,真学不到东西,真事
点赞 评论 收藏
分享
07-09 18:28
门头沟学院 Java
写着提前批,结果还要实习4个月以上???
程序员牛肉:这种不用看,直接投了,面试的时候问对应的HR就行。有可能他们是直接复制的暑期实习的模板。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务