![](/img/trans.png)
[英]What happens when the JVM runs out of memory to allocate during run time?
[英]What happens if String Pool runs out of memory?
如果String Pool上有許多字符串文字並且內存不足,會發生什么。 是否會增加它的大小,如果是的話怎么樣? 如果沒有,如果我嘗試創建更多的字符串文字會發生什么?
第一點 - STRING POOL沒有字符串文字
String Pool是指向String對象的引用的集合。
當你編寫String =“hello”時,它會在堆上創建一個String對象“hello”,並在String Literal Pool中放置對該對象的引用(前提是沒有Object已經存在於名為“Hello”的堆上)
注意 “hello”被 添加到相應類的常量池中 。 因此,只有在卸載類后才可以對其進行垃圾回收。 所以當卸載類時,Objects會獲得GC
會發生什么?
字符串池是通過一個稱為字符串規范化的過程完成的,這是一個weakHashMap。當沒有其他對鍵或值的引用時,這個weakHashMap會自動清除映射。 .ie字符串將從JVM中收集垃圾。
它的大小是否會增長?
沒有STROL POOL沒有增長的大小 - 這是編譯時間常數
它的大小如何增長?
您需要在編譯時指定-XX:StringTableSize = N ,其中N是字符串池映射大小
最后你的問題:
如果String Pool內存不足會發生什么?
最簡單的答案:你得到java.lang.OutOfMemoryError:java.lang.OutOfMemoryError: Java heap space
從Java 7開始的java.lang.OutOfMemoryError:java.lang.OutOfMemoryError: Java heap space
。 而java.lang.OutOfMemoryError: PermGen space
舊版java中的java.lang.OutOfMemoryError: PermGen space
就像6
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.