YGC:在堆中的新生代中进行的垃圾回收操作。也叫Minor GC。

怎么判断一个对象可以进行垃圾回收

  • 首先肯定得知道对象被ygc了多少次。Java语言的开发人员在Java对象头中进行了相关的设置,准确来说是在对象头中的mark work中进行了设置。 点击这里查看markOop.hpp


来看第44行中的说明:

  • unused:Java对象中预留给未来的25位
  • hash:对象的hash值,31位
  • age:gc次数,4位
  • biased_lock:偏向锁标识(只有一个线程访问时,不用每次都获取锁),配合lock使用,1位
  • lock:对象的锁级别,2位。unlocked(无锁)(0 01)、偏向锁(1 01)、locked(轻量级锁)(00)、monitor(重量级锁)(10)、marked(GC标记)(11)

上面5个属性再加上一个unused,一共占了64位,也就是8个字节,这些在64位系统下的配置。

可以看到age明确表明了只占有4位长度(0.5个字节),能存0~15的值。然后发现通过-XX:MaxTenuringThresholdjvm命令对age值进行调整,默认为15。

记录

在网上看到过设置MaxTenuringThreshold大于15的情况。疑问:设置的MaxTenuringThreshold参数是否you效??

参考:
https://stackoverflow.com/questions/13543468/maxtenuringthreshold-how-exactly-it-works
https://support.oracle.com/knowledge/Middleware/1283267_1.html