为什么age=3的对象,比age=2的对象少呢?

neptune 2013-04-27
2013-04-27T10:57:17.685+0800: 57590.721: [GC 57590.722: [ParNew
Desired survivor size 751619272 bytes, new threshold 3 (max 3)
- age   1:    7154464 bytes,    7154464 total
- age   2:    5705400 bytes,   12859864 total
- age   3:    3511792 bytes,   16371656 total
: 1068348K->23370K(2097152K), 0.0478420 secs] 1952947K->911586K(7340032K), 0.0482100 secs] [Times: user=0.24 sys=0.02, real=0.05 secs]


YGC的间隔在3分钟,完全有时间把新生代清理好,一些线程正在引用的对象进入到survivor区形成age=1的对象(包括线程引用的一次性不能被回收的对象和一些产生的Cache对象)。再一次YGC后上次那些线程引用的一次性对象,应该被清理干净了,留下的是Cache对象,也就是说age=2的对象都应该是系统长期引用的对象(基本是不能被回收的)。那为什么在age=3时对象数变少了呢,第3次YGC回收了age=2中的那些对象?
xiaoyu 2013-04-27
neptune 写道
2013-04-27T10:57:17.685+0800: 57590.721: [GC 57590.722: [ParNew
Desired survivor size 751619272 bytes, new threshold 3 (max 3)
- age   1:    7154464 bytes,    7154464 total
- age   2:    5705400 bytes,   12859864 total
- age   3:    3511792 bytes,   16371656 total
: 1068348K->23370K(2097152K), 0.0478420 secs] 1952947K->911586K(7340032K), 0.0482100 secs] [Times: user=0.24 sys=0.02, real=0.05 secs]


YGC的间隔在3分钟,完全有时间把新生代清理好,一些线程正在引用的对象进入到survivor区形成age=1的对象(包括线程引用的一次性不能被回收的对象和一些产生的Cache对象)。再一次YGC后上次那些线程引用的一次性对象,应该被清理干净了,留下的是Cache对象,也就是说age=2的对象都应该是系统长期引用的对象(基本是不能被回收的)。那为什么在age=3时对象数变少了呢,第3次YGC回收了age=2中的那些对象?


是的
RednaxelaFX 2013-04-28
YGC统计出来对象的数量不随着年龄而递增的话多半意味着有过早晋升(premature tenuring)的状况。JavaOne 2010上Tony Printezis做的"Step by Step: GC Tuning in the HotSpot Java Virtual Machine" (S314348) 里有不错的讲解。
xiaoyu 2013-04-28
RednaxelaFX 写道
YGC统计出来对象的数量不随着年龄而递增的话多半意味着有过早晋升(premature tenuring)的状况。JavaOne 2010上Tony Printezis做的"Step by Step: GC Tuning in the HotSpot Java Virtual Machine" (S314348) 里有不错的讲解。


啊 难道没有第三次ygc ,回收age=2的?
RednaxelaFX 2013-04-28
xiaoyu 写道
RednaxelaFX 写道
YGC统计出来对象的数量不随着年龄而递增的话多半意味着有过早晋升(premature tenuring)的状况。JavaOne 2010上Tony Printezis做的"Step by Step: GC Tuning in the HotSpot Java Virtual Machine" (S314348) 里有不错的讲解。


啊 难道没有第三次ygc ,回收age=2的?

第三次YGC还活着的没晋升的上一次YGC时age=2的对象现在就变成age=3了啊。没啥问题。
如果是提早晋升了就会看到age=3的总比age=2的少,那就是问题了。
xiaoyu 2013-04-28
RednaxelaFX 写道
xiaoyu 写道
RednaxelaFX 写道
YGC统计出来对象的数量不随着年龄而递增的话多半意味着有过早晋升(premature tenuring)的状况。JavaOne 2010上Tony Printezis做的"Step by Step: GC Tuning in the HotSpot Java Virtual Machine" (S314348) 里有不错的讲解。


啊 难道没有第三次ygc ,回收age=2的?

第三次YGC还活着的没晋升的上一次YGC时age=2的对象现在就变成age=3了啊。没啥问题。
如果是提早晋升了就会看到age=3的总比age=2的少,那就是问题了。


了解,其实这个看看gc 日志,老生代是否有增加就应该很明显了(就知道是否有溢出了)
neptune 2013-04-28
xiaoyu 写道
RednaxelaFX 写道
xiaoyu 写道
RednaxelaFX 写道
YGC统计出来对象的数量不随着年龄而递增的话多半意味着有过早晋升(premature tenuring)的状况。JavaOne 2010上Tony Printezis做的"Step by Step: GC Tuning in the HotSpot Java Virtual Machine" (S314348) 里有不错的讲解。


啊 难道没有第三次ygc ,回收age=2的?

第三次YGC还活着的没晋升的上一次YGC时age=2的对象现在就变成age=3了啊。没啥问题。
如果是提早晋升了就会看到age=3的总比age=2的少,那就是问题了。


了解,其实这个看看gc 日志,老生代是否有增加就应该很明显了(就知道是否有溢出了)



你指的溢出是什么溢出呀,是survivor溢出吗,这个基本不可能,我的Desired survivor size 751619272 bytes(716m).
Desired survivor size 751619272 bytes, new threshold 3 (max 3)
- age   1:    7154464 bytes,    7154464 total
- age   2:    5705400 bytes,   12859864 total
- age   3:    3511792 bytes,   16371656 total
不可能是溢出情况。
xiaoyu 2013-04-28
neptune 写道
xiaoyu 写道
RednaxelaFX 写道
xiaoyu 写道
RednaxelaFX 写道
YGC统计出来对象的数量不随着年龄而递增的话多半意味着有过早晋升(premature tenuring)的状况。JavaOne 2010上Tony Printezis做的"Step by Step: GC Tuning in the HotSpot Java Virtual Machine" (S314348) 里有不错的讲解。


啊 难道没有第三次ygc ,回收age=2的?

第三次YGC还活着的没晋升的上一次YGC时age=2的对象现在就变成age=3了啊。没啥问题。
如果是提早晋升了就会看到age=3的总比age=2的少,那就是问题了。


了解,其实这个看看gc 日志,老生代是否有增加就应该很明显了(就知道是否有溢出了)



你指的溢出是什么溢出呀,是survivor溢出吗,这个基本不可能,我的Desired survivor size 751619272 bytes(716m).
Desired survivor size 751619272 bytes, new threshold 3 (max 3)
- age   1:    7154464 bytes,    7154464 total
- age   2:    5705400 bytes,   12859864 total
- age   3:    3511792 bytes,   16371656 total
不可能是溢出情况。


所有是有可能被回收掉了
Global site tag (gtag.js) - Google Analytics