我知道他们已经用Java 8中的MetaSpace替换了PermGen。但是我有几个问题:
-XX:+CMSClassUnloadingEnabled
来收集的,那么什么使MetaSpace比PermGen更好呢? OutOfMemoryException
。 提前致谢
最佳答案
是的,GC满时将在元空间上运行,它也会
动态增加(如果允许)分配给
元数据。
改进是随着元空间的动态扩展,
是permgen无法做到的。
根据对元空间的描述,它仅使用 native 内存
(无分页)。
根据Pierre-Hugues Charbonneau(link here)的研究,很明显,元空间的引入并不一定解决OOM问题,它充其量只是解决问题的方法,它试图动态调整元空间的内存大小以适应不断增长的需求。加载的类的数量,这些类可能会产生不受控制地增长的副作用(只要 native 内存允许)。
通过将MaxMetaspaceSize
参数设置为JVM并运行提供的示例程序,可以实现著名的OOM错误。
非常感谢Pierre-Hugues Charbonneau。