Java基礎-內存管理

對象內存管理

  • 編譯好的Java程序要運行在JVM中

  • 程序,無論是代碼還是數據,都要存儲在內存中,JVM爲Java程序提供並管理所需要的內存空間

  • JVM在其內存開闢了"堆"、“棧”、"方法區"三個區域,分別存儲不同的數據;

在這裏插入圖片描述

垃圾回收機制

  • 垃圾回收器(GC)是JVM自帶的一個線程(自動運行着的程序),用於回收沒有任何引用指向的對象;

  • Java程序員不用擔心內存管理,因爲GC會自動進行回收管理;

  • GC的回收對程序員來說是透明的,並不一定一發現有無引用的對象,就立刻回收;

  • System.gc():用於建議虛擬機馬上調度GC線程回收資源,具體的實現策略取決於不同的JVM系統;

堆內存

  • 這部分空間用於存儲使用new關鍵字所創建的對象,成員變量是對象的屬性,也在堆中;

  • 對象的聲明週期:創建對象時存在堆中,對象被GC回收時消失;

  • 內存泄漏:不再使用的對象沒有被及時的回收;

  • 建議:當對象不在使用時應及時將引用設置爲null;

在這裏插入圖片描述

非堆–棧

  • 這部分空間用於存儲程序運行時(正在調用中的)在方法中聲明的所有局部變量;

  • 調用方法時JVM在棧中爲該方法分配一個對應的空間,也稱爲棧幀,棧幀中包含所有的局部變量(包括參數);

  • 當方法調用結束時,棧幀消失;

  • 局部變量的生命週期:調用方法時存在棧中,方法調用結束時與棧幀一併消失;

在這裏插入圖片描述

非堆–方法區

  • 這部分空間用於存放類的信息(包括方法);

  • Java程序運行時,首先會通過類裝載器載入類文件的字節碼信息,經過解析後將其裝入方法區;

  • 所有對象共享類的方法,方法僅有一份,通過this來區分具體的對象;

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章