HotSpot上的分代
分成三部分:年轻代、年老代、永久代
很多的对象一开始是分配在年轻代的,这些对象在熬过了一定次数的young gc之后,就进入了年老代。同时,一些比较大的对象,一开始就可能被直接分配到年老代中(因为年轻代比较小嘛)。
年轻代
年轻代也进行划分,划分成:一个Eden和两个survivor。如下图:
大部分的对象被直接分配到年轻代的eden区(之前已经提到了是,很大的对象会被直接分配到年老代中),
survivor区里面放至少熬过一个YGC的对象,在survivor里面的对象,才有机会被考虑提升到年老代中。
同一时刻,两个survivor只被使用一个,另外一个是用来进行复制GC时使用的。
GC类型
年轻代的GC叫young GC,有时候也叫 minor GC。年老代或者永久代的GC,叫 full GC,也叫major GC。
也就是说,所有的代都会进行GC。
一般的,首先是进行年轻代的GC,(使用针对年轻代的GC),然后是年老代和永久代使用相同的GC。如果要压缩(解决内存碎片问题),每个代需要分别压缩。
有时候,如果年老区本身就已经很满了,满到无法放下从survivor熬出来的对象,那么,YGC就不会再次触发,而是会使用FullGC对整个堆进行GC(除了CMS这种GC,因为CMS不能对年轻代进行GC)
快速分配内存
多线程进行对象建立的时候,在为对象分配内存的时候,就应该保证线程安全,为此,就应该进入全局锁。但全局锁是非常消耗性能的。
为此,HotSpot引入了Thread Local Allocation Buffers (TLAB)技术,这种技术的原理就是为每个线程分配一个缓冲,用来分配线程自己的对象。
每个线程只使用自己的TLAB,这样,就保证了不用使用全局锁。当TLAB不够用的时候,才需要使用全局锁。但这时候对锁的时候,频率已经相当的低了。
为了减少TLAB对空间的消耗,分配器也想了很多方法,平均来说,TLAB占用Eden区的不到1%。
- 大小: 27.4 KB
分享到:
相关推荐
J2SE5.0_CN.chm API中文手册
j2se5.0中文版api第2部分,因为上传权限有限,给大家带来不便,请见谅
JAVA API帮助文档 中文版 CHM版 J2SE5.0
很好用的J2SE 5.0 API,具有索引的功能!!!
很好的j2se的API
J2SE5.0 API.chm,这个是英文的,等会再上传中文的,两个加在一起太大了 只好分开传了。。。
Java (J2SE 5.0) and C# Comparison Java (J2SE 5.0) and C# Comparison
对于java开发人员来说 没有一个帮助文档是很郁闷的 尤其对于自学的朋友们,今天得到一个中文版的J2SE5.0的API,不敢独自享用,共享出来给大家,分为2个部分part01和part02
真正的j2se api 5.0 中文版帮助,有需要的可以下载.
对J2SE 5.0中的一些新特性进行了精辟的讲解。
J2SE 5.0- Java安全及网络计算的最新技术
2022年J2SE5.0新特性之使用代理服务器Java教程.docx
在Eclipse 3.1中体验J2SE 5.0的新特性
提示:本人已将一次性可完整下载版上传,名称为:J2SE 5.0 API (中文版)方便网友下载! 很好用的J2SE 5.0 API,具有索引的功能!!! 下载前请注意:不过由于本人等级太低所以只能分3部分上传,劳烦您下载全部3部分...
提示:本人已将一次性可完整下载版上传,名称为:J2SE 5.0 API (中文版)方便网友下载! 很好用的J2SE 5.0 API,具有索引的功能!!! 下载前请注意:不过由于本人等级太低所以只能分3部分上传,劳烦您下载全部3部分...
提示:本人已将一次性可完整下载版上传,名称为:J2SE 5.0 API (中文版)方便网友下载! 很好用的J2SE 5.0 API,具有索引的功能!!! 下载前请注意:不过由于本人等级太低所以只能分3部分上传,劳烦您下载全部3部分...
J2SE专题-正则表达式源代码-非常全面 J2SE专题-正则表达式源代码-非常全面
一份我觉得不错的中文J2SE API文档,拿来给大家一起分享
J2SE6.0 API(冷冬大雪),目前应该说比较好的j2se,api大全,讲的非常详细,翻译准确以及java1.6中文api 和java官方文档api共三套装,三套装,三套装,欢迎下载
Java API帮助文档 J2SE5.0 网页版