Java-JVM垃圾回收回顧

前言

在說JVM垃圾回收之前,你必須要瞭解一些知識,棧區和堆區的區別

棧區——由編譯器自動分配和釋放,一般存放函數的參數值、局部變量(值變量和引用變量)等。
這裏需要注意 引用變量就是 用 new關鍵字 創建的對象,數組等,在棧區裏只會存對象的引用(也叫地址,或指針),實際對象會在堆區中創建一個相對大小的存儲空間

堆區——由程序員分配及釋放,若程序員不釋放,程序結束後可能由OS回收

看到這裏你應該知道JVM垃圾回收的是什麼東西了吧? 對 ,那就是堆區裏需要回收的對象

哪些對象需要被回收

答: 在程序裏已經沒有引用的 引用對象(對象,或數組)

這些對象怎麼產生的?
例如:

String str = new String("JAVA探究"); 
str = new String("JAVE學習");
//最後 str 指向  JAVE學習  
//那麼之前的 new String("JAVA探究")  就會在堆內存中變成垃圾。
看下圖

這裏寫圖片描述

怎樣讓JVM進行垃圾回收

1、 什麼情況下JVM纔會進行垃圾回收?

答:JVM並不會主動 進行垃圾回收,只有在內存不夠的時候纔會進行。
2、回收時調用哪個方法?
object 的 finalize 方法

3、怎麼才能讓JVM主動 進行垃圾回收?
只需兩步,在程序需要的地方寫上兩句話。

//1、通知jvm 準備進行垃圾回收
System.gc();
//Runtime.getRuntime().gc();這個和System.gc()作用完全一樣

//2、立刻執行垃圾回收
Runtime.getRuntime().runFinalization();
//作用一樣System.runFinalization(); 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章