上一篇 <<<JVM新生代老年代算法匯總圖解
下一篇 >>>JVM垃圾回收引用計數(shù)法和根搜索算法圖解
垃圾回收機制
a.垃圾回收是由垃圾收集器自動執(zhí)行的
b.程序員只能通過System.gc方法來建議執(zhí)行,無法確保是否執(zhí)行和何時執(zhí)行烙荷。
c.jvm調優(yōu)無法提高程序的運行效率镜会,它真正的目的是減少GC回收的次數(shù),讓系統(tǒng)更多的時間是去處理用戶的請求
核心思想:堆內存中對象沒有任何引用
finalize方法作用
finalize()方法在垃圾收集器將對象從內存中清除出去前终抽,做必要的清理工作戳表。
它是Object類中的,所有子方法均可以覆蓋拿诸。
但垃圾回收的時候注意finalize必須是跟著對應的對象扒袖。
//1. 直接用new對象,未復制變量時亩码,則調用System.gc()可能會執(zhí)行垃圾回收季率,finalize()內容也可能會執(zhí)行
new FinalizeTest2();
System.gc();
//2. 復制給變量后,就算調用了System.gc()描沟,finalize()內容也肯定不會執(zhí)行
FinalizeTest2 fs = new FinalizeTest2();
System.gc();
// 3.當引用對象置為空的時候飒泻,調用System.gc()可能會執(zhí)行垃圾回收,但加了System.runFinalization();就一定會執(zhí)行
FinalizeTest2 fs = new FinalizeTest2();
fs = null;
System.gc();
System.runFinalization();
@Override
public void finalize(){
System.out.println("垃圾清理前的操作");
}
public static void main(String[] args){
//這里要用new FinalizeTest()吏廉;要不然finalize無法執(zhí)行到泞遗,因為finalize是屬于FinalizeTest類的
Object obj = new Object();
// FinalizeTest obj = new FinalizeTest();
obj = null;
System.gc();
}
@Override
public void finalize(){
System.out.println("垃圾清理前的操作");
}
相關文章鏈接:
<<<JVM整體內存結構的圖解,直觀明了
<<<javap命令查看對象信息及操作方法在JVM層的實現(xiàn)原理
<<<javap命令反查匯編指令匯總
<<<ClassLoader類加載器順序Demo測試與雙親委派源碼解讀
<<<自定義SPI和熱部署技術破壞類加載器的雙親委派模式
<<<JVM中對象如何完成空間分配和初始化工作
<<<JVM元空間(方法區(qū))和棧內存溢出原因及解決方案
<<<JVM堆內存溢出和內存泄露問題定位和解決
<<<JVM常見死鎖問題產生原因和多種診斷方式
<<<服務器CPU飆升為100%問題排查及如何避免
<<<JVM內存診斷命令和排查工具匯總
<<<JVM新生代老年代算法匯總圖解
<<<JVM垃圾回收引用計數(shù)法和根搜索算法圖解
<<<JVM垃圾回收STW(Stop-The-World)代碼演示
<<<JVM垃圾回收器的發(fā)展歷程及使用場景匯總
<<<JVM串行并行垃圾回收器的關注點
<<<一張圖看懂CMS垃圾回收器的底層原理
<<<G1能作為JDK9默認垃圾回收器的優(yōu)勢分析
<<<CMS和G1的漏標問題解決及三色標記算法圖解
<<<GC中新生代進入老年代的方式匯總
<<<GC常用日志參數(shù)配置及分析工具說明
<<<FullGC席覆、MinorGC史辙、STW等常見問題如何解答
<<<JVM性能調優(yōu)的評估指標及調優(yōu)示例