Java8 已经从它的内存区域中完全删除了 permgen space。它会完全阻止内存泄漏问题吗? ...
Java8 has completely removed permgen space from it's memory area. will it completely stop memory leak issues ? ...
这是我从 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
没有。当然内存泄漏仍然是可能的。实际上大部分内存泄漏出现在普通堆中,而不是 permgen/metaspace,因此此更改不会影响它们。例如,可以在静态字段中创建一个 HashMap
并在不删除元素的情况下逐渐填充它。这样堆消耗会不断增长。
同时将 class 数据从 permgen 移动到 metaspace 并不意味着它不需要 space。它只是分配在堆外区域,可以通过 MaxMetaspaceSize
选项(默认为无穷大)进行控制。此更改主要是内部的(使 JVM 中的某些事情更容易)并且不会影响普通程序员。它解决的唯一可见问题是,使用默认设置,您现在不太可能在加载太多 classes 时遇到问题。但是,如果您有严重的 class 加载程序泄漏,这将无济于事:您仍然受到机器上物理内存和交换大小的限制。
这是我从 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
没有。当然内存泄漏仍然是可能的。实际上大部分内存泄漏出现在普通堆中,而不是 permgen/metaspace,因此此更改不会影响它们。例如,可以在静态字段中创建一个 HashMap
并在不删除元素的情况下逐渐填充它。这样堆消耗会不断增长。
同时将 class 数据从 permgen 移动到 metaspace 并不意味着它不需要 space。它只是分配在堆外区域,可以通过 MaxMetaspaceSize
选项(默认为无穷大)进行控制。此更改主要是内部的(使 JVM 中的某些事情更容易)并且不会影响普通程序员。它解决的唯一可见问题是,使用默认设置,您现在不太可能在加载太多 classes 时遇到问题。但是,如果您有严重的 class 加载程序泄漏,这将无济于事:您仍然受到机器上物理内存和交换大小的限制。