java創(chuàng)建一個棧 jvm堆和棧的區(qū)別?
jvm堆和棧的區(qū)別?1. 堆棧:每當啟動一個新線程時,Java虛擬機都會為它分配一個Java堆棧。JVM將只在Java堆棧上執(zhí)行兩個操作:堆棧按下或以堆棧幀為單位退出堆棧。每個線程都包含一個堆棧區(qū)域,
jvm堆和棧的區(qū)別?
1. 堆棧:每當啟動一個新線程時,Java虛擬機都會為它分配一個Java堆棧。JVM將只在Java堆棧上執(zhí)行兩個操作:堆棧按下或以堆棧幀為單位退出堆棧。每個線程都包含一個堆棧區(qū)域,其中只存儲基本數(shù)據(jù)類型的對象和自定義對象(而不是對象)的引用,對象存儲在堆棧區(qū)域中。
2. 堆:存儲所有對象,每個對象都包含相應的類信息——類的目的是獲取操作指令。JVM中的所有線程只共享一個堆。堆不存儲基本類型和對象引用,只存儲對象本身。
在Java里堆內存和棧內存有什么區(qū)別?
這源于古老的C語言概念。函數(shù)中基本數(shù)據(jù)類型(字符串除外)應用的所有局部變量,即函數(shù)退出時消失的變量,包括函數(shù)本身的參數(shù)定義,都使用堆棧內存來構造內存。這樣做的目的是輸入函數(shù),將變量值放入堆棧,然后自動從堆棧中退出函數(shù)。內存應用和回收將自動完成。這些堆棧空間變量只能由函數(shù)本身引用,不能引用其他函數(shù)。
C語言的全局變量和Java的對象,即C語言的malloc()函數(shù)和C、Java新構造的對象都在堆組織的內存中,因此許多函數(shù)都可以引用這些存儲空間的值或對象。存儲在堆空間中的對象和數(shù)據(jù)需要根據(jù)程序員的需要進行釋放。例如,C語言使用free(),C語言使用析構函數(shù),Java具有自動循環(huán)機制。
隨便寫。如果你有任何錯誤,不要噴。