JDK 7 的 JVM 内存分配

在 JDK 7 以及其前期的版本中,JVM 的堆内存空间大致可以分成三个大区:新生代、老年代和永久代。其中新生代进一步划分为 Eden 区和两个 Survivor 区。
对象被创建后,首先会被放入新生代中的 Eden 区内。如果对象的存活时间超过两个 Survivor 阶段,它就会被转移到老年代(Old Generation)。
永久代主要存放着对象的方法、变量等元数据信息。如果永久代内存不够用,我们通常会遇到如下错误:
java.lang.OutOfMemoryError: PermGen space
相比之下,Java 8 对这部分做了重大调整,引入了元空间(Metaspace)来替代永久代,解决了固定大小导致的内存溢出隐患。

