1. 程式人生 > >Java記憶體洩漏

Java記憶體洩漏

1、記憶體洩漏的通用定義

記憶體洩漏也稱作“儲存滲漏”,用動態儲存分配函式動態開闢的空間,在使用完畢後未釋放,結果導致一直佔據該記憶體單元。直到程式結束。(其實說白了就是該記憶體空間使用完畢之後未回收)即所謂記憶體洩漏。

2Java中的記憶體洩漏定義

在Java中,記憶體洩漏就是存在一些被分配的物件,這些物件有下面兩個特點,首先,這些物件是可達的,即在有向圖中,存在通路可以與其相連;其次,這些物件是無用的,即程式以後不會再使用這些物件。如果物件滿足這兩個條件,這些物件就可以判定為Java中的記憶體洩漏,這些物件不會被GC所回收,然而它卻佔用記憶體。(與c++不同,Java種記憶體洩漏一定要是可達的,不然會被

gc回收,C++中如果物件不可達,則不會被自動回收)

3、舉例說明java中記憶體洩漏

下面給出了一個簡單的記憶體洩露的例子。在這個例子中,我們迴圈申請Object物件,並將所申請的物件放入一個Vector中,如果我們僅僅釋放引用本身,那麼Vector仍然引用該物件,所以這個物件對GC來說是不可回收的。因此,如果物件加入到Vector後,還必須從Vector中刪除,最簡單的方法就是將Vector物件設定為null。

Vector v=new Vector(10);

for (int i=1;i<100;i++)

{

Objecto=new Object();

v.add(o);

o=null;        

}


參考文章:

相關推薦

java記憶體洩漏問題排查(三)

這個系列應該改個名字,叫做java 命令列視窗(執行在windows環境下)突然退出,但是埠號存在,java虛擬機器程序也存在。   昨天出差到客戶現場一番排查。排除了之前的一系列推測(根據程式日誌發現,程式異常退出是有規律的,每3小時一次,在57分異常退出) 記憶體溢位:程式退出後未生

java記憶體洩漏記憶體溢位

java記憶體洩漏和記憶體溢位 概念 a)記憶體洩露:被分配物件可達但無用 b)記憶體溢位:無法申請到足夠的記憶體而產生的錯誤 記憶體洩漏場景 a)建立和應用生命週期一樣的單例物件 b)建立匿名內部類的靜態物件 c)未關閉資源 d)長時間存在的集合容器中建立生命週期短

java記憶體洩漏記憶體溢位

記憶體洩漏指你用malloc或new申請了一塊記憶體,但是沒有通過free或delete將記憶體釋放,導致這塊記憶體一直處於佔用狀態。 記憶體溢位指你申請了10個位元組的空間,但是你在這個空間寫入11或以上位元組的資料,就是溢位。 1. 記憶體溢位 out

java記憶體洩漏原理

1. 什麼是記憶體洩漏? 記憶體洩漏的定義:物件已經沒有被應用程式使用,但是垃圾回收器沒辦法移除它們,因為還在被引用著。 要想理解這個定義,我們需要先了解一下物件在記憶體中的狀態。下面的這張圖就解釋了什麼是無用物件以及什麼是未被引用物件。 上面圖中可以看出,裡面有被引用物件和未被引

java記憶體洩漏的分析方法

這幾天,一直在為Java的“記憶體洩露”問題糾結。Java應用程式佔用的記憶體在不斷的、有規律的上漲,最終超過了監控閾值。福爾摩 斯不得不出手了!   記憶體溢位 out of memory,是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用,出現out of memory;比如

【轉】java記憶體洩漏的定位與分析

1、為什麼會發生記憶體洩漏 Java如何檢測內在洩漏呢?我們需要一些工具進行檢測,並發現記憶體洩漏問題,不然很容易發生down機問題。 編寫java程式最為方便的地方就是我們不需要管理記憶體的分配和釋放,一切由jvm來進行處理,當java物件不再被應用時,等到堆記憶體不夠

一次 Java 記憶體洩漏排查過程,漲姿勢

人人都會犯錯,但一些錯誤是如此的荒謬,我想不通怎麼會有人犯這種錯誤。更沒想到的是,這種事竟發生在了我們身上。當然,這種東西只有事後才能發現真相。接下來,我將講述一系列最近在我們一個應用上犯過的這種錯誤。最有意思的是,一開始的跡象揭示的問題,與實際發生的問題完全不同。 在一個淒涼的午夜 午夜剛過,我就被一條

Java記憶體洩漏問題--java既然存在垃圾回收機制,為什麼還存在記憶體洩漏

1.什麼叫記憶體洩漏? 簡單來說就是一個東西放在記憶體裡的時間太長了,當你的程式都跑完了,它還存在那裡。這時它是白白的佔用了你的記憶體,累積起來佔用的記憶體越來越多……最後就會導致JVM報錯:out of memory。他佔用的是我們的實體記憶體。 2.java記憶體洩漏的根本原因是? 記

Java記憶體洩漏解決方案

記憶體洩露:     是指在程式執行過程中會不斷的分配記憶體空間,那些不再使用的記憶體空間應該即時回收它們,從而保證可以保證系統可以再次使用這些記憶體。如果存在無用的記憶體沒有被收回來,那就是記憶體洩露。  說明: 對於陣列的操作,堆和棧的操作需要慎重的考慮是否存在記憶體洩露

Java記憶體洩漏簡單的分析總結

一、       理解Java記憶體回收機制  Java的記憶體管理就是物件的分配和釋放問題。在Java中,記憶體的分配是由程式完成的,而記憶體的釋放是由垃圾收集器(Garbage Collection,GC)完成的

java記憶體洩漏的定位與分析

1、為什麼會發生記憶體洩漏 Java如何檢測內在洩漏呢?我們需要一些工具進行檢測,並發現記憶體洩漏問題,不然很容易發生down機問題。 編寫java程式最為方便的地方就是我們不需要管理記憶體的分配和釋放,一切由jvm來進行處理,當java物件不再被應用時,等到堆記憶體不夠

java記憶體洩漏分類及避免

要點 記憶體洩露是指程式中間動態分配了記憶體,但在程式結束時沒有釋放這部分記憶體,從而造成那部分記憶體不可用的情況,重啟計算機可以解決,但也有可能再次發生記憶體洩露,記憶體洩露和硬體沒有關係,它是由軟體設計缺陷引起的。 記憶體洩漏可以分為4類: 1) 常發性記憶體洩漏。發生

Java記憶體洩漏分析系列之三:jstat命令的使用及VM Thread分析

- S0C: Young Generation第一個survivor space的記憶體大小 (kB). - S1C: Young Generation第二個survivor space的記憶體大小 (kB). - S0U: Young Generation第一個Survivor space當前已使用的記憶

Java記憶體洩漏

1、記憶體洩漏的通用定義 記憶體洩漏也稱作“儲存滲漏”,用動態儲存分配函式動態開闢的空間,在使用完畢後未釋放,結果導致一直佔據該記憶體單元。直到程式結束。(其實說白了就是該記憶體空間使用完畢之後未回收)即所謂記憶體洩漏。 2、Java中的記憶體洩漏定義 在Java中

java記憶體洩漏問題排查

      前些日一直在忙效能測試和效能調優,發現效能基本滿足要求了,但是出現一個很詭異的問題,我分配給JVM記憶體10G記憶體系統能夠跑兩天,如果分配2個G記憶體也就跑3個小時,據測試的同事反應在不停的效能測試時系統宕機時間很有規律,而且這個問題持續了有一段時間了,同事也

JRockit檢測Tomcat記憶體溢位JAVA記憶體洩漏問題

公司的一個JAVA應用系統上線以來,基本每1天OutOfMemoryError: PermGen space一次。JAVA堆上限1個G,出現了好多次,想到JRockit可以分析記憶體洩漏的問題: 1. JRockit簡介 Jrockit是Bea開發的符合JAVA虛擬機器規範的虛擬機器+虛擬機器監控軟體。 虛

淺談並小結java記憶體洩漏

public class B extends A{ public void test(){ new Thread(new Demo()).start(); } @Override public void dosth() { // TODO Auto-generated method s

JAVA記憶體洩漏的幾種情況

Java記憶體洩漏引起的原因:   記憶體洩漏是指無用物件(不再使用的物件)持續佔有記憶體或無用物件的記憶體得不到及時釋放,從而造成記憶體空間的浪費稱為記憶體洩漏。   長生命週期的物件持有短生命週期物件的引用就很可能發生記憶體洩漏,儘管短生命週期物件已經不再需要,但是因

java記憶體洩漏5種情況總結】

記憶體洩漏定義:一個不再被程式使用的物件或變數還在記憶體中佔有儲存空間。由於java的JVM引入了垃圾回收機制,垃圾回收器會自動回收不再使用的物件,瞭解JVM回收機制的都知道JVM是使用引用計數法和可達性分析演算法來判斷物件是否是不再使用的物件,本質都是判斷一個物件是否還被引

一個java記憶體洩漏的排查案例

這是個比較典型的java記憶體使用問題,定位過程也比較直接,但對新人還是有點參考價值的,所以就紀錄了一下。下面介紹一下在不瞭解系統程式碼的情況下,如何一步步分析和定位到具體程式碼的排查過程(以便新人蔘考和自己回顧)初步的現象業務系統消費MQ中訊息速度變慢,積壓了200多萬條訊