Java8已经从它的内存区域中完全删除了permgen空间。它会完全阻止内存泄漏问题吗? ...

时间:2016-02-12 05:35:13

标签: java memory-management memory-leaks java-8 permgen

这是我从oracle网站获得的:

区域:HotSpot / gc

概要

The command line flags PermSize and MaxPermSize have been removed and are 
ignored. If used on the command line a warning will be emitted for each.

Java HotSpot(TM) Server VM warning: ignoring option PermSize=32m; support 
was removed in 8.0
Java HotSpot(TM) Server VM warning: ignoring option MaxPermSize=128m;
support was removed in 8.0

不相容的性质

source

1 个答案:

答案 0 :(得分:4)

没有。当然,内存泄漏仍然存在。实际上大多数内存泄漏都出现在普通堆中,而不是出现在permgen / metaspace中,因此这种更改不会影响它们。例如,可以在静态字段中创建HashMap并逐渐填充它而不删除元素。这样堆的消耗量就会不断增长。

同样将类数据从permgen移动到元空间并不意味着它不需要空间。它只是在堆外区域分配,可以通过MaxMetaspaceSize选项(默认为无穷大)进行控制。这种变化主要是内部的(使JVM中的某些东西更容易)并且不会影响正常的程序员。它解决的唯一可见问题是,使用默认设置,当加载太多类时,您现在不太可能遇到问题。但是如果你有一个重要的类加载器泄漏,这对你没有帮助:你仍然受到你机器上的物理内存和交换大小的限制。