java内存池怎么分开?

问题:

我正在使用jconsole监控Java应用程序。内存选项卡可让您在以下之间进行选择
class=”lang-none prettyprint-override”>

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”

他们有什么区别?

回答:

堆记忆

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

  •  伊甸园:最初为多数对象分配内存的池。
  •  幸存者空间:包含在Eden空间的垃圾回收中幸存下来的对象的池。
  •  终身一代:包含在幸存者空间中存在一段时间的对象的池。

非堆内存

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

  •  永久代:该池包含虚拟机本身的所有反射数据,如类和方法对象。对于使用类数据共享的Java VM,这一代分为只读和读写区。
  •  代码缓存:HotSpot Java VM还包括一个代码缓存,其中包含用于编译和存储本机代码的内存。

 Here’s some documentation on how to use Jconsole

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How is the java memory pool divided?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 58 = 67