菜鸟学习JVM(二)——分代回收
来源:互联网 发布:大数据特征的 4v 理论 编辑:程序博客网 时间:2024/06/05 23:53
原博主要求附链接,尊重原创
分代回收
上篇文章介绍了几种垃圾回收的算法,但这些算法当中并没有一个是完美的,可以代替其他所有算法,他们各自有各自的优势。因此JVM需要根据垃圾回收对象的特性,选择合适的回收算法。
JVM中大部分对象的生命周期非常短,朝生夕灭;还有一些对象,他们的生命周期很长,有的甚至长生不老、寿与JVM齐。于是就有了分代的概念。
分代
- 新生代(
Young Generation
)
+Eden
+Survivor From
+Survivor To - 老年代(
Old Generation
) - 永久代(
Permanent Generation
)
如上面所描述的,JVM将内存分成不同的区域。针对新生代和老年代分别才用了如下两种回收方式:
- Minor Collection(
对新生代进行垃圾回收,Hot Spot采用的复制算法
) - Full Collection(
对所有分代进行垃圾回收,也叫Major Collection,Hot Spot采用的是标记-压缩算法
)
回收过程
一般情况下,新产生的对象,会被分配到新生代的Eden( 大对象会直接进入老年代
)。当Eden没有足够空间的时候,就会进行Minor Collection。在Minor Collection执行的时候,会将存活下来的对象复制到Survivor区。如果Survivor也没有足够空间的时候,将会有一部分对象被迁移到老年代,这个迁移的过程称作晋升(Promotion
)。
随着Minor Collection的不断进行,老年代中的对象也会越来越多,当老年代内存紧张的时候,就会触发Full Collection。通常Full Collection会对整个堆进行回收(CMS收集器除外,它不对新生代进行回收
)。相比新生代,老年代的回收频率非常低,因为它每一次回收耗时很长。
JVM会通过以下两个参数判断对象是否晋升到老年代:
* 年龄,经历Minor Collection的次数代表对象的年龄
* 大小,即占用内存空间的大小
一些JVM的参数
关于JVM调优
我们经常谈到JVM调优,JVM也为我们提供了非常多的自定义参数(上表只是跟今天内容比较紧密的一些参数
),供我们配置。现实中,我们的软硬件环境各不相同,实际的需求场景也千差万别,所以我们很难(说很难是因为严谨,其实就没有
)写出一套放诸四海皆准的配置来。具体的调优方案,还得根据具体的应用,以及工程师的个人经验和能力来制定。目前小弟能力有限,没有什么调优的经验,所以就不过多的说啦,待日后时机成熟了,一定再跟大家分享。
- 菜鸟学习JVM(二)——分代回收
- 菜鸟学习JVM(二)——分代回收
- 菜鸟学习JVM(一)——垃圾回收算法
- 菜鸟学习JVM(一)——垃圾回收算法
- JVM调优总结(五)——分代垃圾回收详述1
- JVM调优总结(六)——分代垃圾回收详述2
- JVM分代垃圾回收
- jvm分代回收机制
- JVM分代垃圾回收
- JVM学习笔记(七)--- 分代垃圾回收详述1
- JVM学习笔记(八)--- 分代垃圾回收详述2
- JVM调优(五)-分代垃圾回收详述1
- JVM调优(六)-分代垃圾回收详述2
- JVM调优总结(4)分代垃圾回收
- JVM调优总结(4):分代垃圾回收
- JVM调优总结(4):分代垃圾回收
- JVM调优总结(4):分代垃圾回收
- JVM调优总结(4):分代垃圾回收
- c++添加开机启动项,win32 api操作注册表,读写注册表
- VisualVM使用手册
- 孤儿进程与僵尸进程[总结]
- LED照明灯具隐藏“杀手”---健康照明
- Android 封装一个简单的SDK基本思路.
- 菜鸟学习JVM(二)——分代回收
- 4.3解决冲突
- cocoapods下Swift如何配置DEBUG打印函数
- oracle 11.2.0.3升级到11.2.0.4
- 多态
- Visual VM操作手册
- Spring transaction事务之roll back回滚: rollback-for
- vue-css过渡效果
- 遍历一个文件夹