1. 程式人生 > >java棧stack和堆heap的工作原理,用途及區別?舉例說明

java棧stack和堆heap的工作原理,用途及區別?舉例說明

沒有 inner tro htm jpg ati 節省空間 who border

java堆和棧的區別【新手可忽略不影響繼續學習】 (視頻下載) (全部書籍)

Java中內存分成兩種:一種是棧stack,一種是堆heap。

函數中的一些基本類型的變量(int, float)和對象的引用變量(reference)都在函數的棧中,如int a = 5,有個地方先存5,之後再讓a指向那個地方。w=new Window(),是w指向Window的首地址。馬克-to-win,存取速度快,稍遜於寄存器, 比堆快,

函數執行完後,Java會自動釋放掉為函數裏變量開辟的棧內存空間,該內存空間可以立即被另作他用。

堆heap內存用來存放由new創建的對象和數組。堆內存,負責運行時(runtime, 執行生成的class文件時)

數據,由JVM的自動管理。缺點是,存取速度較慢。

棧中的引用變量指向堆中的對象或數組。

棧中有共享池的概念,(視頻下載) (全部書籍)比如下面例子中,sz="hello";在棧中創建一個String對象引用變量sz,然後看看棧中有沒有"hello",如果沒有,則將"hello"存放進棧,並令sz指向”hello”,如果已經有”hello” 則直接令sz指向“hello”。對於int, float 類型的變量也是一樣的有這種共享池的概念,

對於下面程序中:ss0 = new String( "hello" );是用new()來新建對象的,(視頻下載) (全部書籍)存於堆中。每調用一次就會創建一個新的對象。當然從節省空間的角度來講,肯定不如str="hello",有童鞋一定問,那要它有什麽用?當時設計編譯器時,為什麽要設計它?馬克-to-win,那我請問你,如果在你編程序時,你還不知道字符串內容怎麽辦?這時就用到new String(String original),所以,什麽都有什麽的用處。

(註意不能看調試窗口裏value id,eclipse的問題)

技術分享圖片


本章源碼

public class Test
{
public static void main(String args[]) {
String str, str1, ss0, ss1, ss2, ss3, ss4;
str = "hello";
str1 = "hello";
ss0 = new String("hello");
ss1 = new String("hello");
ss2 = new String("bye");
。。。。。。。。。。。。。。。。。。
詳情請見:http://www.mark-to-win.com/index.html?content=JavaBeginner/javaUrl.html&chapter=JavaBeginner/JavaBeginner2_web.html#StackHeapDifference

java棧stack和堆heap的工作原理,用途及區別?舉例說明