Java中的堆和栈
棧內(nèi)存歸屬于單個(gè)線程,每個(gè)線程都會(huì)有一個(gè)棧內(nèi)存,其存儲(chǔ)的變量只能在其所屬線程中可見(jiàn),即棧內(nèi)存可以理解成線程的私有內(nèi)存。
而堆內(nèi)存中的對(duì)象對(duì)所有線程可見(jiàn)。堆內(nèi)存中的對(duì)象可以被所有線程訪問(wèn)。
- 堆:存放所有new出來(lái)的對(duì)象
- 棧:存放基本數(shù)據(jù)類(lèi)型的變量數(shù)據(jù)和對(duì)象的引用,對(duì)象(new出來(lái)的對(duì)象)本身并不在棧中,而是存放在堆中或者常量中
- 常量池:存放基本類(lèi)型常量和字符串常量
注意:棧和常量池中的對(duì)象可以共享,對(duì)于堆中的對(duì)象不可以共享。
String str1 = "abc"; String str2 = "abc"; String str3 = "abc"; String str4 = new String("abc"); String str5 = new String("abc"); String str6 = new String("abc");通過(guò)new操作產(chǎn)生的一個(gè)字符串,會(huì)先去常量池中查找有沒(méi)有“abc”對(duì)象,如果沒(méi)有,則在常量池中創(chuàng)建一個(gè)此字符串對(duì)象,然后堆中再創(chuàng)建一個(gè)常量池中此“abc”對(duì)象的拷貝,所以,對(duì)于String str = new String(“abc”),如果常量池原來(lái)沒(méi)有“abc”,則產(chǎn)生兩個(gè)對(duì)象,否則產(chǎn)生一個(gè)對(duì)象。
int a1 = 1; int a2 = 2; int a3 = 3; public static final int INT1 = 1; public static final int INT2 = 2; public static final int INT3 = 3;總結(jié)
- 上一篇: Java的回调机制--学习笔记
- 下一篇: Java中的ThreadLocal的使用