Weblogic教程

常见 JDK 的内存机制

下面以 Sun 的 JDK 为例,讲述 JDK 一般的内存机制。

Java 的内存由三个代组成,如下图所示:

Java 内存的这三个代分别为:

  • Young(年青代,也叫 new 区):

  • Young 还可以分为 Eden 区和两个 Survivor 区(from 和 to,这两个 Survivor 区大小严格一至),新的对象实例总是首先放在 Eden 区,Survivor 区作为 Eden 区和Tenure(old)的缓冲,可以向 Tenure(old)转移活动的对象实例。

  • Tenured(保持代,也叫 old 区)

  • Tenure 中存放生命周期长久的实例对象,但是里面的对象也是会被回收掉。这里,Young 和 Tenured 就组成了 Java 的所谓堆内存,也就是大家经常提到的 heap内存,或 heap 区。

  • Perm(永久代)

  • Perm(perm)则是非堆内存的组成部分。主要存放加载的 Class 类级对象如 class 本身,method、field 等等。


那图中标示的 Virtual 区又是干什么的呢?

其实,在 JVM 启动时,就已经保留了固定的内存空间给 Heap 内存,这部分内存并不一定都会被 JVM 使用,但是可以确定的是这部分保留的内存不会被其他进程使用,这部分内存大小由“-Xmx”参数指定。

影响这个的另一个参数是“-Xms”,如果“-Xms”指定的值比“-Xmx”的小,那么两者的差值就是 Virtual 内存值。

随着程序的运行,Eden 区、Tenured 区和 Perm 区会逐渐使用保留的 Virtual 空间。。


关注微信获取最新动态