关闭

JVM运行时内存

别叨叨 1年前 ⋅ 92 阅读

Java堆从垃圾回收的解度还可以分为:新生代(Eden区、From Survivor区和To Survivor区)、老年代、永久代。

  • 新生代:是用来存放新生的对象。一般占据堆的三分之一空间。由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收。
  • 老年代:主要存放应用程序中生命周期长的内存对象。老年代的对象比较稳定,所以MajorGC不会频繁执行。在进行MajorGC前一般都先进行了一次MinorGC,使得有新生代的对象进入老年代,导致空间不够用时才触发。当无法找到足够大的连续空间分配给新创建的较大对象时也会提前触发一次MajorGC进行垃圾回收腾出空间。当老年代内存无法分配时就会拋出OOM(Out of Memory)异常。
  • 永久代:指内存永久保存区域,主要存放class和meta(元数据)的信息,class在被加载的时候被放入永久区域,它和存放实例的区域不同,GC不会在主程序运行期对永久区域进行清理。所以这也导致了永久代的区域会随着加载的class的增多而占满内存,最终拋出OOM异常。

全部评论: 0

    我有话说: