Jave虚拟机划分的三个代: 年轻代、年老代和持久代

    xiaoxiao2026-09-28  12

    转载自:点击打开链接 虚拟机中的共划分为三个代:         年轻代(Young Generation)、年老代(Old Generation)和持久代(Permanent  Generation)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系 不大。年轻代和年老代的划分是对垃 圾收集影响比较大的。

    年轻代:

            所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生 命周期短的对象。年轻代分三个区。一个Eden区,两个 Survivor区(一般而言)。大部分对象在 Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这 个 Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor去也满了 的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制“年老区 (Tenured)”。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时 存在从Eden复制过来对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第 一个Survivor去过来的对象。而且,Survivor区总有一个是空的。同时,根据程序需要, Survivor区是可以配置为多个的(多于两个),这样可以增加对象在年轻代中的存在时间,减 少被放到年老代的可能。

    年老代:

            在年轻代中经历了N次垃圾回收后仍然存活的对象,就会被放到年老代中。因此,可以认 为年老代中存放的都是一些生命周期较长的对象。 持久代:         用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应  用可能动态生成或者调用一些class,例如Hibernate 等,在这种时候需要设置一个比较大的持  久代空间来存放这些运行过程中新增的类。持久代大小通过-XX:MaxPermSize=<N>进行设置。 持久带补充:持久带也称为方法区 方法区:方法区存储每一个java类的结构信息:比如运行时常量池,字段和方法数据,构造函数和普通方法的字节码内容以及类、实例、接口初始化时需要使用到的特殊方法等数据。  方法区也被称为永久代,如果不显示指定的话,GC回收的目标仅针对方法区的常量池和类型卸载
    转载请注明原文地址: https://ju.6miu.com/read-1312401.html
    最新回复(0)