PermGen的和堆,差异及其意义

问题描述 投票:15回答:5

朋友们,

能否请您给我的意义,区别并使用堆和PermGen的。此外,它会是很好的了解他们中分别加载哪些类。

有关Java虚拟机规范说明将是很有益

由于Punith

java memory jvm heap-memory
5个回答
22
投票

存储器(堆)被代,或保持不同年龄的对象的内存池的管理。当一代装满垃圾收集发生在每一代。对象被分配在年轻对象或young generation一代,而且由于婴儿死亡率的大多数对象死在那里。

当被构造任何新对象时,它前进到伊甸空间是Young Generation的一部分。

如果对象还活着一段时间后它去哪里tenured generation长期生活的对象所在。

如果对象是应该活到了过程中存在那么对象移动到Perm Generation.Java classes存储在永久代。


2
投票

良好的联系是否有What does PermGen actually stand for?。特别喜欢这个blog


1
投票

我有大约Per​​mGen的和其他堆内存部分同样的怀疑。做一些搜索后,这里是我最后的结论。

的Java HotSpot虚拟机需要的内存,它从操作系统中获取,这些内存称为堆内存。现在堆如著名称为存储对象和持有其他重要的事情,以及内存。

短住跨度Java对象存储在年轻一代,如果仍然需要这些对象的进一步执行,然后,它被转移到了任期/老一代。并且根据代垃圾收集器的类型,内存被清除。

怎么样的永久代(PermGen的)?的Java HotSpot虚拟机加载在其中使用由JVM存储装载的类和其他元数据PermGen的类/类结构。 PermGen的不是用来存储对象。

除了对象和类结构,JVM代码本身加载程序代理的代码和数据等。

因此,基本上,堆=对象+类结构+ JVM架构。

参考文献:Java DocsJava GC Guide


0
投票

嗯,我不是专家,但PermGem内存驻留在堆内,因为它像所有的类都在运行时加载一个特殊的地方。所以,如果你有太多的课,PermGem抛出一个OutOfMemoryException。而且还有堆商店,你实例化你的Java代码,其中GC收集不受任何变量在堆栈中正在运行的线程引用的对象内的对象。


0
投票

我相信PermGen的只有堆内存中存储区。它是为像抱着字符串特殊目的而创建的。

创建没有得到PermGen的内存这只是特殊类如String在JDK 6或以下的所有对象。

在现代的JDK版本像8.0及以上,Pergen找不到然而新的内存不一样堆和其他各种高速缓冲存储器进行了介绍。

© www.soinside.com 2019 - 2024. All rights reserved.