什麼是字符串常量池?

1,jvm爲了提高性能和減少內存開銷,在進行實例化字符串常量時做了一些優化。

首先,爲了減少在jvm中創建的字符串的數量,字符串類就維護了一個字符串池,每當代碼創建字符串常量時,jvm會首先檢查字符             串常量池。

然後,如果字符串已經在池內,就返回池中的實例引用。

           如果字符串不在池內,就會實例化一個字符串放到池中,java能夠進行這樣的優化時因爲字符串不可變的,可以不用擔心數             據衝突進行共享。

 

原理:實現該優化的基礎是因爲字符串是不可變的,可以不用擔心數據衝突進行共享;

           運行時實例創建的全局字符串常量池中會有一個表,總是爲池中每個唯一的字符串對象維護一個引用,這就意味着它們一              直引用着字符串常量池中的對象,所以,在常量池中這些字符串不會被垃圾收集器回收。

 

存儲位置:在JDK6.0及之前版本,字符串常量池是放在Perm Gen區(也就是方法區)中

                  在JDK7.0版本,字符串常量池被移到了堆中了。至於爲什麼移到堆內,大概是由於方法區的內存空間太小了

 

如何操作:String.intern();

                  通過new操作符創建的字符串對象不指向字符串池中的任何對象,但是可以通過字符串的intern()方法來指向其中的某一個,java.lang.String.intern()返回一個保留池字符串,就是一個在全局字符串池中有了一個入口。如果以前沒有在全局字符串池中,那麼它就會被添加到裏面。

String s1 = "Hello";
String s2 = new String("Hello");
String s3 = s2.intern();
System.out.println("s1 == s3? " + (s1 == s3)); // true

                  

                  

 

發佈了8 篇原創文章 · 獲贊 0 · 訪問量 333
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章