Java 記憶體管理

來源:互聯網
上載者:User

標籤:類型   image   技術分享   垃圾   執行個體   方法   com   需要   部分   

1.記憶體管理

1)對象記憶體管理

  • 編譯好的Java程式需要運行在JVM中
  • 程式,無論代碼還是資料都需要儲存在記憶體中,JVM為Java程式提供並管理所需要的記憶體空間
  • JVM記憶體分為“棧”、“堆”和“方法區”三個地區,分別用於儲存不同資料

 

2)堆

  JVM在其記憶體空間開啟一個成為“堆”的儲存空間,這部分空間用於儲存使用new關鍵字所建立的對象。

  • 儲存所有new出來的對象(包括成員變數)

3)成員變數的生命週期

  訪問對象需要依靠引用變數,當一個對象沒有任何引用時,被視為廢棄的對象,屬於被回收的範圍,該對象中的所有成員變數也隨之被回收。

  • 成員變數的聲明周期為:從對象在堆中建立開始到對象從堆中被回收結束。

 

4)記憶體回收機制

  • 記憶體回收行程(Garbage Collection,GC)是JVM內建的一個線程(自動運行著的程式),用於回收沒有任何引用指向的對象
  • 不用擔心記憶體管理,記憶體回收行程(GC)不定時去堆中回收垃圾
  • GC的回收對程式員來說是透明的,並不一定一發現有無引用的對象就立即回收
  • 一般情況下,當我們需要GC線程即刻回收無用對象時,可以調用System.gc()方法
  • System.gc()用於建議虛擬機器馬上調度GC線程回收資源,具體的實現策略取決於不同的JVM系統

5)記憶體流失

  記憶體流失是指,不再使用的記憶體沒有被及時的回收。嚴重的記憶體流失會因過多的記憶體佔用而導致程式的崩潰。GC線程判斷對象是否可以回收的依據是該對象是否有引用指向,因此,當確定該對象不再使用時,應該及時將其引用設定為null。

6)棧

  JVM在其記憶體空間開闢的一個稱為“棧”的儲存空間,棧用於儲存程式運行時在方法中聲明的所有局部變數(包括參數)。

 

 

7)局部變數聲明周期

  一個啟動並執行Java程式從開始到結束會有多次方法的調用,JVM會為每一個方法的調用在棧中分配一個對應的空間,這個空間成為該方法的棧幀。一個棧幀對應一個正在調用中的方法,棧幀中儲存了該方法的參數、局部變數等資料。當某一個方法調用完成後,其對應的棧幀將被清除,局部變數失效。

8)成員變數與局部變數比較

  • 成員變數:

  ——定義再類中,方法外

  ——有預設初始值,可以不顯式初始化

  ——所在類被執行個體化後,存在堆中,對象被回收時,成員變數失效

  • 局部變數:

  ——定義在方法中

  ——沒有預設值,必須自行設定初始值

  ——方法被調用時,存在棧中,方法調用結束,則棧幀被清除,局部變數一併失效

9)方法區

  方法區用於存放類的資訊,Java程式運行時,首先會通過類裝載器載入檔案的位元組碼資訊,經過解析後將其裝入方法區。類的各種資訊(包括方法)都在方法區儲存。

  當類的資訊被載入到方法區時,除了類的類型資訊以外,同時類內的方法定義也被載入到方法區。

  類再執行個體化對象時,多個對象會擁有各自在堆中的空間,但所有執行個體對象是共用在方法區中的一份方法定義的。

  • 儲存.class位元組碼檔案(包括方法)
  • 方法只有一份,通過this來區分具體的調用對象

 

Java 記憶體管理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.