首页 > 编程语言 > 详细

java学习-JVM-gc-generation

时间:2020-10-23 20:46:31      阅读:27      评论:0      收藏:0      [点我收藏+]

gc 的重点在于 generation 

分代 主要体现为 : 对于 young/old generation 实际 是属于 jvm heap 区域;而metaSpace 是属于 non-heap ,使用的是 jvm进程的native memory;由于其在JVM进程管辖范围内,因此对于GC线程也是可以操作metaspace 区域的;

  • young generation 
    • eden + survivor (from,to): 默认 比例为 8:1:1
    • eden 主要存储小内存的新生对象实例
    • 当发生gc 时, 会将eden区存活的数据保存到survivor区域
    • 对于survivor中的from 和 to 空间,当发生gc时,to区域肯定为空;对于 from 和 to 区域并不是绝对的,两个标识会在gc时进行交换处理
    • 对于survivor中存活的数据当经过的gc次数达到阈值(默认为15)时,就会有一个generation 提升,就会存放到old generation
    • 对于eden区域的内存分配存在fast allocation
      • tlabs : Thread-local allocation buffer ; 默认在eden区域最多占用 1%的空间供 tlabs使用,tlab主要是为了解决muti-thread allocate,可以实现free lock;每一个allocate-thread独占一个tlab; 
      • bump-the-pointer : 为了保证分配时寻址的快速,通过记录上一个对象的结束地址作为新的对象的起始地址,从而达到快速寻址
    • 与之相对应的就是slow allocation: 当分配时没有充足的tlab空间时,就只能直接使用eden区的剩余空间进行内存分配操作;
  • old generation
    • 当对象占用内存空间过大时,新的对象实例会直接生成到old generation 区域,例如 数组等
    • 经过了一定gc后存活的对象
  • metaspace
    • 主要存储 Class相关元信息以及 常量数据

gc操作

  • minor gc 针对 young generation
  • major gc 针对 old generation
  • full gc 针对 整个jvm内存空间,不止包含heap 还包含metaspace

关于 full gc 和 metaspace

https://stuefe.de/posts/metaspace/what-is-metaspace/

java学习-JVM-gc-generation

原文:https://www.cnblogs.com/xingguoblog/p/13865255.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!