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