日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JVM系列之内存泄漏

發布時間:2024/2/28 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM系列之内存泄漏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自http://www.wolfbe.com/detail/201609/378.html

摘要:在Java中,內存泄漏是指程序中存在某些對象已經不會再被使用,但由于仍被其它對象引用而造成內存不能被及時釋放,從而造成內存被浪費。 什么是內存泄漏?在Java中,內存泄漏是指程序中存在某些對象已經不會再被使用,但由于仍被其它對象引用而造成內存不能被及時釋放,從而造成內存被浪費。

我們知道Java創建一個對象后,就會在堆內存中給這個對象分配一塊內存,JVM會監控所有的對象創建、賦值等過程,JVM持有一個記錄對象引用的一個有向圖,起點為Root,把一個對象賦值給某個引用,JVM就會給這個對象在引用有向圖中加多上一條路徑。當一個對象不再被引用,即通過Root到這個對象不可達,在下一次GC到來時就可能回收這個對象。 舉個例子,如下所示:?
1234567public static void main(String[] args){?????Object obj1 = new Object();?????Object obj2 = new Object();?????obj2 = obj1;?????...}


調用obj2=obj1,使obj2引用指向對象OBJ1,OBJ2對象由于沒有引用指向,那么如果下一次GC到來,那么就可能會回收OBJ2對象(因為垃圾回收的過程是不確定的,當一個對象沒有被引用了,那么說明這個對象可以被回收,但不能保證一定會被回收掉)。
如果在程序中確定不再使用OBJ2對象,但卻被其它對象引用,那么就會出現內存泄漏的現象,如下所示:?
1234567Object obj1 = new Object();Object obj2 = new Object();Vector v=new Vector(10);v.add(obj1);v.add(obj2);...obj2 = null;

代碼中obj2 = null確定會釋放obj2對OBJ2對象的引用,但是變量v仍然保持著對OBJ2對象的引用,那么OBJ2對象不會被GC回收。
我們在寫程序時應該正確地釋放不再引用的對象,尤其是在一些靜態集合、數據庫連接、內部類的代碼中,應當檢查是否存在不可用對象的引用仍然被持有,避免因為無法釋放不可用對象而造成內存的浪費。
贊?NaN??分享

總結

以上是生活随笔為你收集整理的JVM系列之内存泄漏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。