1、分配:程序員通過new為每個對象申請內存空間(基本類型除外),所有對象都在堆中分配空間;釋放:對象的釋放是由垃圾回收機制決定和執行的。
Java內存分為兩種:棧內存和堆內存
(1)在函數中定義的基本類型變量(即基本類型的局部變量)和對象的引用變量(即對象的變量名)都在棧內存中分配;
(2)堆內存用來存儲由new創建的對象和數組以及對象的實例變量(即全局變量)
(3)堆的優勢是可以動態分配內存大小,生存期也不必事先告訴編譯器,因為它是運行時動態分配內存的;缺點是運行時動態分配內存,存取速度慢;
(4)棧的優點是存取速度較快僅僅次於CPU中的寄存器,且棧數據可以共享;但是棧中的數據大小和生存期是必須確定的,缺乏靈活性;
(5)只有一個堆區被所有線程共享,堆區不存放基本類型和對象引用只存放對象本身
(6)每個線程包含一個棧區,保存基礎數據類型的對象和自定義對象的引用,每個棧中的數據(原始類型和對象引用)都是私有的,其他棧不能訪問
還有一個方法區:存儲所有對象數據共享區域,存儲靜態變量和普通方法、靜態方法、常量、字符串常量等信息,又叫靜態區,是所有線程共享的。
