Java面向對象學習筆記 -- 7(GC)


1. 垃圾回收機制(GC)java

    1)Java內存分配
    在JAVA程序中,不管代碼仍是數據,都須要存儲在內存中,而java程序所需內存均由JVM進行管理分配,JVM會將申請的內存從邏輯上劃分爲三個區域:堆、棧、方法區。這三個區域分別用於存儲不一樣的數據。
程序員

    堆用來存放建立出來的對象,jvm只有一個堆區(heap)被全部線程共享,堆中不存放基本類型和對象引用,只存放對象自己,每一個對象都包含一個與之對應的class的信息(class的目的是獲得操做指令);jvm

    棧中只保存基本數據類型和對堆空間的對象的引用變量,每一個棧中的數據(基本類型和對象引用變量)都是私有的,其餘棧不能訪問,棧分爲3個部分:基本類型變量區、執行環境上下文、操做指令區(存放操做指令)。 ide

    方法區用於存放類的信息,Java程序運行時,首先會經過類裝載器載入類文件的字節碼信息,通過解析後將其裝入方法區。類的各類信息(包括方法)都在方法區存儲,方法只用一份。spa

    2)垃圾回收線程

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

    GC線程會從棧中的引用變量開始跟蹤,從而斷定哪些內存是正在使用的,若GC沒法跟蹤到某一塊堆內存,那麼GC就認爲這塊內存再也不使用了,即爲可回收的。可是,java程序員不用擔憂內存管理,由於垃圾收集器會自動進行管理。內存

    GC的回收對程序員來講是透明的,並不必定一發現有無引用的對象就當即回收。通常狀況下,當咱們須要GC線程即刻回收無用對象時,能夠調用System.gc()方法。此方法用於建議JVM立刻調度GC線程回收資源,但不保證當即回收。資源

相關文章
相關標籤/搜索