2013-11-21 41 views
3

直到今天,我知道permgen空間有一些限制,當這個限制用盡時,OutOfMemoryError來了,我認爲這是正確的,因爲我看到了OutOfMemoryError Permgen空間。爲什麼Permgen OutOfMemeoryError發生?

Inside the Java Virtual Machine報價,

方法區的大小不一定是固定的。隨着Java應用程序的運行,虛擬機可以擴展和收縮方法區域以適應應用程序的需求。

那麼,當JVM可以擴展時,爲什麼會出現錯誤呢?擴展是否有限制?

回答

3

Method Area是較大的PermGen或非堆內存區域的一部分。 PermSize設置修復PermGen可以使用的最大內存。由於Method Area子部分PermGen,因此只要總體尺寸保持在指定的限制範圍內,它就可以根據需要進行擴展。

此刻,PermGen空間需求超出了指定的限制,(說是因爲擴大Method Area),OutOfMemoryError被拋出。

+0

作爲進一步的說明,當加載太多類時,例如通過在運行時加載類到自定義類加載器,您可以過分延伸permgen。 – Yaneeve

+0

@Yaneeve,你能指出一些鏈接的鏈接! – Santosh

+0

這實際上來自個人經驗。不過,我做了谷歌了這件事,並發現這些有用的鏈接: http://frankkieviet.blogspot.co.il/2006/10/classloader-leaks-dreaded-permgen-space.html http:// www。 kdgregory.com/index.php?page=java.outOfMemory http://plumbr.eu/blog/what-is-a-permgen-leak http://javaeesupportpatterns.blogspot.co.il/2011/02/的OutOfMemoryError-PermGen的圖案,part1.html – Yaneeve