`
yinwufeng
  • 浏览: 286898 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

详谈年轻代

    博客分类:
  • JVM
 
阅读更多

很少有专门研究年轻代的文章,这里有一篇不错,但不详细,待我以后有空补充下。来源:http://shellblog.sinaapp.com/?p=786

 

1.为什么会有年轻代

     我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会腾出很大的空间出来。

2.年轻代中的GC

    HotSpot JVM把年轻代分为了三部分:1个Eden区和2个Survivor区(分别叫from和to)。默认比例为8:1,为啥默认会是这个比例,接下来我们会聊到。一般情况下,新创建的对象都会被分配到Eden区(一些大对象特殊处理),这些对象经过第一次Minor GC后,如果仍然存活,将会被移到Survivor区。对象在Survivor区中每熬过一次Minor GC,年龄就会增加1岁,当它的年龄增加到一定程度时,就会被移动到年老代中。

    因为年轻代中的对象基本都是朝生夕死的(80%以上),所以在年轻代的垃圾回收算法使用的是复制算法,复制算法的基本思想就是将内存分为两块,每次只用其中一块,当这一块内存用完,就将还活着的对象复制到另外一块上面。复制算法不会产生内存碎片。

    在GC开始的时候,对象只会存在于Eden区和名为“From”的Survivor区,Survivor区“To”是空的。紧接着进行GC,Eden区中所有存活的对象都会被复制到“To”,而在“From”区中,仍存活的对象会根据他们的年龄值来决定去向。年龄达到一定值(年龄阈值,可以通过-XX:MaxTenuringThreshold来设置)的对象会被移动到年老代中,没有达到阈值的对象会被复制到“To”区域。经过这次GC后,Eden区和From区已经被清空。这个时候,“From”和“To”会交换他们的角色,也就是新的“To”就是上次GC前的“From”,新的“From”就是上次GC前的“To”。不管怎样,都会保证名为To的Survivor区域是空的。Minor GC会一直重复这样的过程,直到“To”区被填满,“To”区被填满之后,会将所有对象移动到年老代中。

3.一个对象的这一辈子

    我是一个普通的java对象,我出生在Eden区,在Eden区我还看到和我长的很像的小兄弟,我们在Eden区中玩了挺长时间。有一天Eden区中的人实在是太多了,我就被迫去了Survivor区的“From”区,自从去了Survivor区,我就开始漂了,有时候在Survivor的“From”区,有时候在Survivor的“To”区,居无定所。直到我18岁的时候,爸爸说我成人了,该去社会上闯闯了。于是我就去了年老代那边,年老代里,人很多,并且年龄都挺大的,我在这里也认识了很多人。在年老代里,我生活了20年(每次GC加一岁),然后被回收。

4.有关年轻代的JVM参数

1)-XX:NewSize和-XX:MaxNewSize

   用于设置年轻代的大小,建议设为整个堆大小的1/3或者1/4,两个值设为一样大。

2)-XX:SurvivorRatio

   用于设置Eden和其中一个Survivor的比值,这个值也比较重要。

3)-XX:+PrintTenuringDistribution

   这个参数用于显示每次Minor GC时Survivor区中各个年龄段的对象的大小。

4).-XX:InitialTenuringThreshol和-XX:MaxTenuringThreshold

   用于设置晋升到老年代的对象年龄的最小值和最大值,每个对象在坚持过一次Minor GC之后,年龄就加1。

分享到:
评论

相关推荐

    Linux内核编译详谈

    ### Linux内核编译详谈 #### 一、引言 Linux内核是Linux操作系统的心脏,负责管理和调度计算机硬件资源。随着技术的发展,Linux内核也在不断进化以支持最新的硬件和技术特性。本文将详细介绍从早期版本的Linux内核...

    机房维护与管理详谈

    机房 维护 与 管理 详谈

    家庭无线局域网组建方案详谈

    家庭无线局域网组建方案详谈 家庭无线局域网组建方案详谈

    详谈SDN如何对接云平台.docx

    本文探讨了SDN(软件定义网络)如何与云平台进行对接,以实现更加高效和灵活的网络资源管理。首先,对云计算的三层服务模型进行了概述,包括IaaS、PaaS和SaaS,其中IaaS层是本文关注的重点,涉及到基础设施的共享和...

    HACCP基础知识详谈.pptx

    HACCP基础知识详谈.pptx

    详谈Unity3D通过Webservice读取数据库

    从结构上看,Unity3D想要拿数据库的数据,问Web拿就可以了,而对数据库的操作已经外包给Web了,不用你操心。是的,理论上的东西看上去就是这么简单。...但是问题是我Unity3D如何向Web拿数据?我当时就卡在了这步,好,...

    PT100AD采样电路和调试经验详谈

    PT100温度传感器是基于铂的电阻温度特性制造的,其测量精度高、适用温度范围广,并且在中温范围内具有良好的重复性和稳定性。PT100广泛用于需要高精度测量的应用中,尤其是工业测量,其温度范围可达-200℃到650℃。...

    hibernate配置要点详谈

    ### Hibernate配置要点详谈 #### 一、配置文件与配置方式 在Hibernate中,有两种主要的配置文件形式:`hibernate.cfg.xml` 和 `hibernate.properties`。 1. **`hibernate.cfg.xml`**: - 这种配置文件通常包含...

    详谈如何开展危机公关.pptx

    详谈如何开展危机公关.pptx

    详谈数据报格式

    "详谈数据报格式" 在计算机网络中,数据报格式是指数据包的结构和组成部分。IPv6和IPv4是两种常见的数据报格式,今天我们将详细介绍这两种格式的区别和特点。 IPv6数据报格式 IPv6数据包由基本首部和跟随在后面...

    详谈常见的视频编码格式.docx

    详谈常见的视频编码格式.docx

    详谈SAP云转型之路.docx

    详谈SAP云转型之路.docx

    详谈一阶RC低通滤波器如何过滤高频噪声

    关于一阶滤波器的种种有很多资料可查,像截止频率啊,相移啊什么的,这些在这里就不再重复了。本文主要阐述一下阿呆在学习过程中曾被困扰的地方,及本人的简要分析。  本文从无源RC低说起,以一个实例为讨论...

    详谈介绍Fedora10 NFS系统内核设置

    详谈介绍Fedora10 NFS系统内核设置

    PCB布局经验详谈

    《PCB布局经验详谈》 PCB(Printed Circuit Board)布局设计是电子工程中至关重要的一环,它直接影响到电路板的性能、可靠性和生产效率。本文将深入探讨PCB设计的基本流程、布局原则、布线技巧以及检查与制版的注意...

    omnimeeting编译过程详谈

    对于“omnimeeting编译过程详谈”,我们可以深入探讨与之相关的多个知识点,包括编译环境的搭建、源码管理、依赖库的处理、编译选项以及调试技巧。 首先,编译环境的搭建是基础。在编译omnimeeting之前,我们需要...

    详谈家用宽带路由器的各种功能.pdf

    详谈家用宽带路由器的各种功能.pdf

    重庆大学计算机专业考研复习经验详谈.pdf

    重庆大学计算机专业考研复习经验详谈.pdf

Global site tag (gtag.js) - Google Analytics