bat*_*man 53 java garbage-collection java-8
我知道他们已经用Java 8中的MetaSpace取代了PermGen.但我几乎没有问题:
-XX:+CMSClassUnloadingEnabled,那么是什么让MetaSpace比PermGen更好?OutOfMemoryException.提前致谢
Ana*_*rma 53
MetaSpace默认是GC收集的吗?
是的,当GC变满时,它将在元空间上运行,它也会动态增加(给定它允许)为元数据分配的内存.
甚至PermGen是通过添加像-XX:+ CMSClassUnloadingEnabled这样的args来收集GC的,那么是什么让MetaSpace比PermGen更好?
改进的是元空间的动态扩展,这是permgen无法做到的.
MetaSpace基于本机内存,因此它将java对象保留在磁盘而不是VM上?
根据元空间的描述,它只使用本机内存(无分页).
根据Pierre-Hugues Charbonneau的研究(链接在这里),它清楚地表明,元空间的引入并不一定能解决OOM问题,它最多只能解决这个问题,它试图动态调整元空间内存的大小来适应不断增长的问题.加载可能不受控制地增长的副作用的类的数量(只要本机存储器允许它).
我们可以通过将MaxMetaspaceSize参数设置为JVM并运行提供的示例程序来实现着名的OOM错误.
非常感谢Pierre - Hugues Charbonneau.
Fer*_*con 12
作为回应:
默认情况下,如果Metaspace内存到达MaxMetaspaceSize,则会收集它.此参数最初是无限的.限制是机器中的内存.但是当不再需要类和类加载器时,内存会自动释放.如果您怀疑ClassLoader有内存泄漏,则只需要调整此参数.
MetaSpece使用本机内存,内存中的组织使用指针使GC比旧的PermGen内存更快.
不,这意味着JVM像普通的C程序一样使用内存,不要将虚拟内存空间用于java对象.这似乎只是机器限制了内存.如果需要,请注意机器的内存可以交换到磁盘.
如果设置参数MaxMetaspaceSize,则可以获取OutOfMemory,如果未设置此参数,则可以获取进程是否分配所有计算机内存(包括交换空间).
MetaSpace默认是GC收集的吗?
一旦类元数据使用达到"MaxMetaspaceSize",就会触发死类和类加载器的垃圾收集,默认情况下,"unlimited"需要进行适当的监视以限制此类GC的延迟或频率.
甚至PermGen是通过添加像-XX:+ CMSClassUnloadingEnabled这样的args来收集GC的,那么是什么让MetaSpace比PermGen更好?
主要目标是删除permgen,以便用户不必考虑正确调整它的大小.
MetaSpace基于本机内存,因此它将java对象保留在磁盘而不是VM上?
磁盘不是本机内存,而是存储设备.本地内存,在此上下文中是区域,是Java堆遗留的进程的内存
即使MetaSpace也会耗尽内存?
是的,它受到机器内存量的限制.
| 归档时间: |
|
| 查看次数: |
44313 次 |
| 最近记录: |