歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java內存管理--棧、堆和常量池

Java內存管理--棧、堆和常量池

日期:2017/3/1 9:45:31   编辑:Linux編程

今天有朋友問java中String[] str = s.split(",")的內存分析,於是開始查資料並測試。首先,發現在java的內存管理中“常量池”是個很奇怪的東西,很多人不清楚(當然我也不清楚),經查資料總結如下:

棧(Stack) :存放基本類型的變量數據和對象的引用。

堆(heap):存放所有new出來的對象。

常量池(constant pool):在堆中分配出來的一塊存儲區域,存放儲顯式的String常量。另外,可以存儲不經常改變的東西(public static final)。常量池中的數據可以共享。

具體參考:http://www.linuxidc.com/Linux/2014-04/99918.htm

http://www.linuxidc.com/Linux/2014-04/99919.htm

然後再來分析下,String[] str = s.split(",");split會產生幾個對象,存儲在哪?

測試代碼如下:

String s = "aa,aa";

String[] str = s.split(",");

if (str[0] == str[1]) {

System.out.println("str[0]==str[1]");

} else {

System.out.println("str[0]!=str[1]");

}

輸出結果:str[0]!=str[1]

可見,s.split(",");執行的是new String();方法,所以一個split片段會創建兩個對象(如果常量池中沒有的話):常量池中1個,堆中1個。

Copyright © Linux教程網 All Rights Reserved