成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入理解 Java String#intern() 內(nèi)存模型

開發(fā) 后端
大家知道,Java中string.intern()方法調(diào)用會先去字符串常量池中查找相應(yīng)的字符串,如果字符串不存在,就會在字符串常量池中創(chuàng)建該字符串然后再返回。

字符串常量池是一個固定大小的HashMap,桶的數(shù)量默認是1009, 從Java7u40開始,該默認值增大到60013。在Java6當中,字符串常量池是放在Perm空間的,從Java7開始,字符串常量池被移到Heap空間。下面,我們通過測試程序來窺探字符串常量池在Java6,Java7兩個不同版本底下的內(nèi)存分配情況。

測試程序

  1. public class StringPoolTest { 
  2.  
  3.     public void testStringPoolWithLongString(){ 
  4.         long i=0
  5.         while(true){ 
  6.             String longString = "This is a very long string, very very long string to test the gc behavior of the string constant pool"+i; 
  7.             longString.intern(); 
  8.             i++; 
  9.         } 
  10.     } 
  11.  
  12.     public static void main(String[] args){ 
  13.         StringPoolTest stringPoolTest = new StringPoolTest(); 
  14.         stringPoolTest.testStringPoolWithLongString(); 
  15.     } 

測試程序很簡單,一個死循環(huán),循環(huán)里面通過遞增變量i制造唯一的字符串,然后用main函數(shù)啟動程序。

Java 6

我們使用版本Jdk1.6.0_29來跑該程序,打開Java VisualVM監(jiān)控,可以看到,Perm區(qū)不斷發(fā)生GC,由此的出結(jié)論,雖然字符串常量池放在Perm空間,但當Perm空間接近滿的時候,JVM會將字符串常量池中的無用字符串回收掉。

深入理解 Java String#intern() 內(nèi)存模型

Java 7

下面,我們切換到Jdk1.7.0_67重跑該程序,可以看到Perm區(qū)內(nèi)存分配曲線很平滑,沒有出現(xiàn)內(nèi)存分配的現(xiàn)象。

深入理解 Java String#intern() 內(nèi)存模型

 

但在Heap空間,新的對象不斷產(chǎn)生,然后不斷觸發(fā)GC

深入理解 Java String#intern() 內(nèi)存模型

結(jié)論

由于Perm區(qū)大小是有限的,通常只有幾十MB,所以不推薦在Java6下廣泛使用String.intern(),這篇文章string-intern-in-java-6-7-8的性能測試表明,在Java6底下大量使用intern()會導致應(yīng)用性能的顯著下降,還有可能產(chǎn)生OOM錯誤。但從Java7開始,字符串常量池被移到了Heap空間,Heap空間的大小只受制于機器的真實內(nèi)存大小,因此,在Java7下使用String.intern()能更有效地減少重復String對象對內(nèi)存的占用。

責任編輯:王雪燕 來源: Code Log
相關(guān)推薦

2023-11-05 12:05:35

JVM內(nèi)存

2022-06-22 08:02:11

CPU操作系統(tǒng)Java

2023-09-19 22:47:39

Java內(nèi)存

2023-10-27 07:47:58

Java語言順序性

2022-07-06 08:05:52

Java對象JVM

2021-09-08 17:42:45

JVM內(nèi)存模型

2020-11-11 08:45:48

Java

2020-11-04 15:35:13

Golang內(nèi)存程序員

2013-06-20 10:25:56

2020-06-01 21:07:33

C11C++11內(nèi)存

2021-11-26 00:00:48

JVM內(nèi)存區(qū)域

2015-12-28 11:41:57

JVM內(nèi)存區(qū)域內(nèi)存溢出

2017-12-18 16:33:55

多線程對象模型

2016-12-08 15:36:59

HashMap數(shù)據(jù)結(jié)構(gòu)hash函數(shù)

2010-06-01 15:25:27

JavaCLASSPATH

2020-07-21 08:26:08

SpringSecurity過濾器

2023-10-27 07:47:37

計算機內(nèi)存模型

2022-08-21 16:52:27

Linux虛擬內(nèi)存

2020-09-23 10:00:26

Redis數(shù)據(jù)庫命令

2019-06-25 10:32:19

UDP編程通信
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲精品一区在线 | 韩日在线 | 欧美乱大交xxxxx另类电影 | 欧美aaaaaaaaaa | 天天爽夜夜操 | 看av电影 | 一区二区三区四区av | 青青久久 | 精品1区| 久久精品无码一区二区三区 | 欧美日韩视频在线 | 久久久免费 | 久一久| 久久www免费视频 | 欧美日韩在线一区二区 | 日韩精品视频在线 | 91九色在线观看 | 日本精品一区 | 国产精品中文字幕在线播放 | 91av视频在线观看 | 一区二区视频在线 | 精品伊人 | 麻豆久久久久久久 | 精品久久久久一区 | 中文字幕日韩一区 | 欧美九九九 | 午夜精品久久久久久久99黑人 | 狠狠撸在线视频 | 国产日韩久久 | 自拍偷拍亚洲视频 | 精品久久久一区 | 91久久视频 | 手机看片1| 久久久精品 | 亚洲视频免费在线 | 天天干夜夜 | 午夜成人免费视频 | 一级黄色生活视频 | 免费在线观看成人av | 中文字幕中文字幕 | 精品国产乱码久久久久久88av |