小编典典

java内存池是怎么划分的?

all

我目前正在使用 jconsole 监视 Java 应用程序。内存选项卡可让您选择:


Heap Memory Usage
Non-Heap Memory Usage
Memory Pool “Eden Space”
Memory Pool “Survivor Space”
Memory Pool “Tenured Gen”
Memory Pool “Code Cache”
Memory Pool “Perm Gen”

它们之间有什么区别?


阅读 93

收藏
2022-05-24

共1个答案

小编典典

堆内存

堆内存是 Java VM 为所有类实例和数组分配内存的运行时数据区域。堆的大小可以是固定的或可变的。垃圾收集器是一种自动内存管理系统,用于回收对象的堆内存。

  • Eden Space :最初为大多数对象分配内存的池。

  • Survivor Space :包含在 Eden 空间的垃圾收集中幸存下来的对象的池。

  • Tenured GenerationOld Gen :包含在幸存者空间中已存在一段时间的对象的池。

非堆内存

非堆内存包括在所有线程之间共享的方法区域以及 Java VM
内部处理或优化所需的内存。它存储每个类的结构,例如运行时常量池、字段和方法数据,以及方法和构造函数的代码。方法区在逻辑上是堆的一部分,但根据实现,Java
VM 可能不会垃圾收集或压缩它。与堆内存一样,方法区的大小可以是固定的或可变的。方法区的内存不需要是连续的。

  • Permanent Generation :包含虚拟机本身的所有反射数据的池,例如类和方法对象。对于使用类数据共享的 Java VM,这一代分为只读区和读写区。

  • 代码缓存 :HotSpot Java VM 还包括一个代码缓存,其中包含用于编译和存储本机代码的内存。

这是一些关于如何使用 Jconsole
的文档

2022-05-24