什么时候在新生代 什么时候在老年代
时间: 2023-11-03 17:06:13 浏览: 52
在Java虚拟机中,对象的存储是在堆内存中进行的,堆内存又被分为新生代和老年代。新生代是指被划分为Eden区和Survivor区的内存,一般存放新创建的对象;老年代是指存活时间较长的对象所存储的内存区域。
对象在创建时会被分配到新生代的Eden区,如果Eden区没有足够的空间,则会触发一次Minor GC,将Eden区和Survivor区中无用的对象进行清理,同时将存活的对象移动到Survivor区。当Survivor区满时,也会触发一次Minor GC,将Survivor区中的存活对象移动到老年代。当老年代空间不足时,就会触发一次Full GC,对整个堆内存进行清理。
因此,一般情况下,新创建的对象都会在新生代中进行存储,存活时间较短的对象会被清理掉,存活时间较长的对象则会逐渐被移动到老年代中。具体对象何时进入老年代,是由JVM的垃圾回收机制根据对象年龄和存活时间等因素来决定的。
相关问题
新生代 老年代 jvm
JVM(Java虚拟机)将内存分为两个部分:新生代和老年代。
新生代内存用于存放新创建的对象,它的大小通常比较小,主要是因为大部分新创建的对象很快就会被垃圾回收机制回收,不需要长时间占用内存。新生代内存又分为两个区域:Eden区和两个Survivor区。当新对象被创建时,它们会被分配到Eden区,当Eden区满时,会触发一次Minor GC(年轻代垃圾回收),将Eden区和Survivor区中不再被引用的对象清除,并将仍然存活的对象转移到另一个Survivor区中。这样交替多次后,仍然存活的对象会被转移到老年代中。
老年代内存用于存放长时间存在的对象,它的大小比较大,因为这些对象不容易被回收。当老年代内存满时,会触发一次Full GC(全局垃圾回收),对整个堆进行垃圾回收。
新生代,老年代和永久代是什么
新生代(Young Generation)是Java虚拟机中内存管理的一部分,用于存储新创建的对象。新生代分为 Eden空间、Survivor空间1和Survivor空间2三部分, Eden空间为新对象的分配区域,Survivor空间为存储经过一次垃圾回收后仍然存活的对象。
老年代(Old Generation)是Java虚拟机中内存管理的一部分,用于存储较长时间存活的对象。当新生代中的对象经过多次垃圾回收后仍然存活时,会被移动到老年代中。
永久代(Permanent Generation)是Java虚拟机中内存管理的一部分,用于存储Java类的元数据、方法信息、字符串池等内容。在Java8及以后版本中,永久代已经被元空间(Metaspace)所取代。