java如何進行內存分配和管理

Java內存的分派與辦理是Java的焦點手藝之一 , 一般涉及以下區域:
1.棧區:由編譯器主動分派釋放 , 存放函數的參數值、局部變量的值等 。
2.堆區:由法式員分派釋放 , 若是法式員不釋放 , 法式竣事時可能由OS收受接管 。
3.文字常量區:存放常量字符串 , 法式竣事后由系統釋放 。  
4.法式代碼區 :存放代碼 。
5.全局區(靜態區):全局變量和靜態變量的存儲在統一塊區域 , 初始化的全局變量和靜態變量在統一塊區域 , 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域 。

java如何進行內存分配和管理



java如何進行內存分配和管理



需要這些哦
Java
方式/
11.棧
【java如何進行內存分配和管理】       是在函數中界說的一些根基類型的變量數據 , 還有對象的引用變量都在函數的棧內存平分配 。 當在一段代碼中界說一個變量時 , Java就在棧中為這個變量分派內存空間 , 當該變量退出該感化域后 , java會主動釋放失落為該變量分派的內存空間 。 棧內存是java法式的運行區 , 是在線程建立時建立的 。 它的生命周期跟從線程的生命周期 , 線程竣事棧內存也就釋放 。 對于棧來說不存在垃圾收受接管的問題 , 只要線程竣事 , 該棧就竣事了 。

java如何進行內存分配和管理



22.堆
       堆內存是用來存放由關頭字new建立的對象和數組 。 在堆平分配的內存 , 由java虛擬機主動垃圾收集器來辦理 。 在堆中建立一個對象后 , 還可以在棧中界說一個變量 , 讓這個變量的值等于對象在堆內存中的首地址 , 棧中的變量就是對象的引用 , 半斤八兩于java中的指針 。 當法式運行到對象地點的語句塊之外 , 對象占有的內存不會主動釋放 , 在沒有引用變量指標的目的它時 , 隨后一個不確定的時候被垃圾收集器收受接管失落 。

java如何進行內存分配和管理



33.常量池
       常量池指的是在編譯期被確定 , 并被保留在已編譯的.class文件中的一些數據 。 除了包含代碼中所界說的各類根基類型(int , long等)和對象型(string、數組等)的常量值(final) , 還包含一些以文本形式呈現的符號引用 。 在法式執行時 , 常量池會存儲在MethodArea(方式區)中 , 而不是堆中 。 一個java虛擬機實例只存在一個堆內存 , 堆內存的大小是可以調節的 , 類加載器讀取了類文件后 , 需要把類、方式、常變量(const潤色的變量)放到堆內存中 , 堆內存分為三部門:永遠存儲區、新生區、老年區 。

java如何進行內存分配和管理



44.棧和堆的合作
       棧的優勢是存取速度比堆快 , 僅次于寄放器 , 錯誤謬誤是棧中的數據大小與保存期必需是確定的 , 缺乏矯捷性 。 棧中存放一些根基類型的變量數據和對象引用 。 堆是一個運行時數據區 , 類的對象從平分配空間 , 堆的優勢是可以動態地分派內存大小 , 保存期不必事先告訴編譯器 , 錯誤謬誤是因為在運行時動態分派內存 , 存取速度慢 。

猜你喜歡