stack 和heap | 新手Java 工程師的學習筆記 - - 點部落
文章推薦指數: 80 %
heap. 1.可動態申請之內存空間. 2.java中new XXX() 物件全部會放到heap中 一旦garbage collection system偵測到某對象沒被引用就會銷毀此物件. 大概三四個月前 準備面試時補習班老師給了我這個連結 http://www.importnew.com/27326.html 我試著爬文找答案 雖然沒完成但總之也整理了一些資訊 先從stack跟heap開始... stack: 1.stack在記憶體中用來存放可以預測生命週期的資料 以便作業系統管理, 可以想成一層一層堆起來的盒子裡面會存放數值型別的變數或是引用, 當變數生命週期結束盒子就會被移走 2.如果管理的不好會產生stackoverflow 3.生命週期在scope內{這裡面}也就是說跑到底就結束 heap 1.可動態申請之內存空間 2.java中newXXX()物件全部會放到heap中 一旦garbagecollectionsystem偵測到某對象沒被引用就會銷毀此物件 3.可想成在某個公園擺放得一團亂的盒子 物件參照會放到stack中的某個盒子,相對應的物件實體會放到公園中的某個空盒子 當物件實體生命週期結束,不再被引用, 就會被系統標註沒人使用最後再把它刪除 比較: 1.stack 優勢:存取速度比heap還快 缺點:stack中存的數據大小生命週期 都要固定缺乏靈活性 2.heap 優勢:動態分配內存大小,生命週期不用告訴編譯器 缺點:運行時要動態分配內存所以運行速度較慢 3.stack與heap一樣 在java都是程式自動管理無法自行設定stack或是heap 4.stack存八大基本資料: int,short,long,byte,float,double,boolean,char 數據還可共享 比如inta=3; intb=3; 此時 系統會先在stack創立reference(參照類型)a然後找有沒有字面值為3的地址 沒有的話 會自己創一個再將a指向它 接著創造referenceb,看到有字面值3的地址就指向它 改b=4也不會刪掉3這個字面值,系統會新增一個4的字面值在stack然後再讓b指向它 5.wrapper會將資料存在heap 但String比較特殊 Stringa="abc";Stringb="abc"; Stringc=newString("abc");Stringd=newString("abc"); 這樣的情況下 a==b成立,會在stack共用abc c==d就不成立,因為兩者都會各新增一個實例再讓reference指向它們 6.Integeri=3底層會轉為Integeri=newInteger(3) 這點跟String不一樣 P.S 資料參考以下連結: http://619lucky.blogspot.tw/2010/09/java-stack-and-heap.html 原作者如果希望刪除這篇文章請告知,謝謝;) stackheapjava 回首頁
延伸文章資訊
- 1Stack Memory and Heap Space in Java - Baeldung
Heap space is used for the dynamic memory allocation of Java objects and JRE classes at runtime. ...
- 2Java Heap - Javatpoint
In Java, a heap is a chunk of memory which is shared among all threads. In a heap, all class inst...
- 3Determining the Java heap memory size - IBM
The Java heap is memory that contains objects used by Java programs. It contains objects that are...
- 4stack 和heap | 新手Java 工程師的學習筆記 - - 點部落
heap. 1.可動態申請之內存空間. 2.java中new XXX() 物件全部會放到heap中 一旦garbage collection system偵測到某對象沒被引用就會銷毀此物件.
- 5java.lang.OutOfMemoryError Java heap space? 怎麼解?
前言因為工作關係,其實不只會碰到node.js有時候還會協助其他專案,而有的專案就是用java 寫的很久之前在伺服器噴出一個OutOfMemoryError: Java heap ...