Java是一種面向對象的語言,它的內存劃分是棧內存和堆內存。在程序運行時,Java虛擬機會自動管理內存,根據需要將數據分配到棧內存和堆內存中。
棧內存存放的是局部變量和方法調用等的信息。它是按照先進后出(FILO)的方式存儲數據。棧內存的管理是非常高效的,并且它的分配和回收都是由程序自動完成的,無需手動干預。
堆內存是用于存儲對象的數據,它允許程序員手動申請和釋放內存。堆內存的分配是由程序員手動完成的,但是回收工作還是由Java虛擬機進行的。堆內存的回收是一項比較麻煩的工作,需要進行垃圾回收,即清除那些不再被使用的對象。
public class Test { public static void main(String[] args) { int a = 1; String s = "hello"; Object obj = new Object(); } }
上面的代碼中定義了一個整型變量a、一個字符串變量s和一個對象變量obj。它們被分配到了棧內存和堆內存中:
棧內存 堆內存 +--------------+ +--------------+ | | | | | | | | | obj----------->Object obj | Address1000 | | | | | | | | s------------>String s | "hello" | | | | | | | | a------------>int a | 1 | | | | | +--------------+ +--------------+
在棧內存中,變量a和s被分配了空間,并分別被賦值為1和"hello"。對象變量obj被分配了存放地址的空間,但是它所引用的對象被分配到了堆內存中。
在堆內存中,對象變量obj引用的Object對象被分配到了Address1000的內存地址中,而字符串"hello"也被分配到了堆內存中。需要注意的是,同一個對象可以被多個變量所引用,但是它只被分配了一次內存空間。
上一篇ajax免刷新打開新頁面
下一篇php libevent