2016-02-12 11 views
0

這是我從甲骨文網站獲得:Java8已經完全從其內存區域移除了permgen空間。它會完全停止內存泄漏問題嗎? ...

區:熱點/ GC

簡介不兼容性

source 

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 

自然

+0

移除permgen空間不能阻止內存泄漏,因爲前者存在的permgen空間永遠不會造成內存泄漏。 – Holger

+0

如果有人不理解問題或問我的問題的上下文,只是簡單地投票而已! 。關於這個問題,誰曾經低估了它,要麼他不懂Java,要麼只是報復。除非有足夠的理由這樣做,否則從來沒有對任何人做過這種事情。 – siddhartha

+0

@霍爾: 我從來沒有說過permgen空間的存在導致了內存泄漏。 jvm中的permgen空間用於存儲我們的應用程序正在使用的對象的元數據。如果有GC未能清除的未使用對象,則會因爲產生一些內存錯誤而成爲內存泄漏。 https://cdivilly.wordpress.com/2012/04/23/permgen-memory-leak/ – siddhartha

回答

4

No.當然內存泄漏仍然是可能的。實際上大多數內存泄漏出現在普通堆中,而不是在permgen/metaspace中,所以這種更改不會影響它們。例如,可以在靜態字段中創建一個HashMap,並逐漸填充它而不刪除元素。這種方式堆消費將不斷增長。

將類數據從permgen移動到元空間並不意味着它不需要空間。它只是分配到堆外區域,可以通過MaxMetaspaceSize選項進行控制(默認爲無限)。這種改變大部分是內部的(使得JVM中的一些事情更容易)並且不影響正常的程序員。它解決的唯一可見的問題是,在默認設置下,當加載太多類時,您現在不會遇到問題。但是如果你有一個重要的類加載器泄漏,這不會對你有所幫助:你的機器仍然受到物理內存和交換大小的限制。