【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”区被填满之后,会将所有对象移动到年老代中。 

全部评论

相关推荐

宇算唯航:目测实缴资本不超100W的小公司
点赞 评论 收藏
分享
码农索隆:单休一个月少休息4天,一年就是48天,平时节假日,别人3天假期,单休的两天
点赞 评论 收藏
分享
陈逸轩1205:才105 哥们在养生呢
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 11:30
仁者伍敌:kpi都懒得刷了属于是
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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