JVM垃圾回收机制(一)

分析Java堆对象的生命流程

在这里插入图片描述

1.对象在内存分配

(1)内存规整的情况:内存规整的时候添加一个对象,指针就会下滑,但是会存在多线程的情况下,会存在指针碰撞的情况,使用CAS会降低性能,所以使用了一个叫栈上分配方法
(2)内存不规整的时候:内存不规整的时候使用的是标志空闲法。
(3)任何新的对象都会进入新生代的eden区

2.对象的GC回收

理解GC过程:
在这里插入图片描述
理解:新创建的对象会进入到新生代的eden区,随着对象的不断地额创建,Eden区快要满了的时候,会进行一次minor GC,需要存活的对象会被复制右移到s0,eden区的对象会被清除,当对象不断的继续创建,eden区再次满了的时候,会进行第二次minor GC,第二次GC会清楚Eden区+s0区的对象,存回的对象会被复制移动到s1区

1.如果对象很大怎么办?

-XX:PertenareSizeThreadold=xxxx,设置jvm参数,当大于这个值时,对象直接进入老年代‘

2.长期存活的对象怎么帮?

-XX:MAXTenaringThreadOld=1,每次minor GC都会记录每一个对象的AGE,当AGE大于这个值的时候,就会进入老年代

3.jvm会动态判定对象的年龄,然后判断是否进入老年代

相同年龄的对象的大小总和>survior空间的一半时,会进入老年代

猜你喜欢

转载自blog.csdn.net/sinat_30594513/article/details/88412711
今日推荐