JVM 调优简要思想及简单案例 -JVM 分代模型
前言
JVM 将 Java 堆内存划分为了两个区域,一个是年轻代,一个是老年代。年轻代里的对象,他们的特点是创建之后很快就会被回收。老年代里的对象,他们的特点是需要长期存在。
JVM 分代模型
大部分的正常对象,都是优先在新生代分配内存的。但是新生代也肯定是会有容量限制的,比如说有 1g、1.5g 或者 2g,如果新生代本来预先分配的内存空间,几乎被对象给占满了,此时假设我们代码继续运行,还需要在新生代里去分配一个对象,但发现新生代里内存空间都不够了,这个时候,就会触发一次新生代内存空间的垃圾回收。它会把新生代的这些垃圾对象然后进行一次垃圾回收,新生代随着系统的运行,进行这个垃圾回收之后新生代还会产生垃圾,然后再次回收掉一些不用的对象,然后保留的一些有用的对象,新生代的它那个空间就会变小下来,那可又又可以继续用了。
新生代可能随着系统的运行,不停的创建对象,然后让新生代变满,接着垃圾回收一次,大量对象被回收掉,但是某些对象,例如静态变量,是不会被回收掉的,会存活在新生代里的,不会被回收。这种情况 JVM 有一条规定:如果一个实例对象在新生代中,成功的在 15 次新生代垃圾回收之后,还是没被回收掉,就说明他已经 15 岁了,就会被转移到 Java 堆内存的老年代中去。
上面的情况不断发生,越来越多的对象进入老年代,一旦老年代也满了,也需要对老年代进行垃圾回收。对老年代的垃圾回收,我们称之为老年代 GC
版权声明: 本文为 InfoQ 作者【zarmnosaj】的原创文章。
原文链接:【http://xie.infoq.cn/article/c27e3542b99009c376c433a11】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论