歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java 之 對象與垃圾回收

Java 之 對象與垃圾回收

日期:2017/3/1 9:28:09   编辑:Linux編程

1.垃圾回收機制只負責回收堆內存中的對象,不會回收任何物理資源(如數據庫連接,網絡IO等資源)

2.程序無法精確控制垃圾回收的運行,垃圾回收會在合適的時候運行。當對象永久的失去引用後,系統會在合適的時間回收其占用的內存。

3.在垃圾回收機制回收任何對象之前,總會先調用它的finalize()方法。

對象在內存中的狀態:

可 達 狀 態:當一個對象被創建後,若有一個以上的引用變量引用他,則這個對象在程序中處於可達狀態,程序可通過引用變量來調用該對象的實例變量和方法。

可恢復狀態:如果程序中某個變量不在有任何引用變量引用它,它就進入了可恢復狀態。在這種狀態下,垃圾回收機制會准備回收這個變量所對應的內存,在回收該對象之前,系 統會調用所用可恢復對象的fnalize()方法,如果此時有一個引用變量引用該對象,該對象就重新變為可達狀態。

不可達狀態:當對象和所用引用變量的聯系被切斷,且系統已經調用了該對象的finalize()方法,仍沒有使該對象變為可達狀態。此時該對象進入不可達狀態,只有當對象處於不可達狀態時,系統才會開始回收該對象占用的資源。

public class StatusTranfer{
public static void test(){
//執行此步時,對象12345處於可達狀態
String a = new String("12345");
//執行到此步時,對象12345處於可恢復狀態
//對象123處於可達狀態
a = new String("123");
}
public static void main(String[] args) {
test();
}
}

強制垃圾回收
程序只能控制一個對象什麼時候不被引用變量引用,但不能控制系統什麼時候進行垃圾回收。

程序無法精確控制java垃圾回收的時機,但仍然能夠強制系統進行垃圾回收————這種強制只是通知系統進行垃圾回收,但系統是否進行垃圾回收仍然不確定。大部分時候,程序強制系統進行垃圾回收會有一些效果。

強制垃圾回收的兩種方式:

1。調用System類的gc()靜態方法: System.gc()

2.調用Runtime的gc()實例方法:Runtime.getRuntime().gc()。

Copyright © Linux教程網 All Rights Reserved