從所周知,Java虛擬機(JVM)及垃圾收集器(GC)負責管理大多數的內存任務,但是Java應用系統中還是有可能出現內存泄漏。事實上,OOM之類的現象在大型項目中也是一個常見的問題。避免內存泄漏的第一步是要弄清楚它是如何發生的,然后對癥下藥。
那究竟是什么導致了 Java 程序中的內存泄漏呢?難道 Java 虛擬機的垃圾收集器不應該管理未使用的內存嗎?是的,它會進行管理,但是垃圾收集的對象只能是不再被引用的對象。但是,某些不再需要的對象,卻在系統的某個地方仍在引用它,這樣就不能對這些對象進行垃圾收集,在日志中的大量String對象的生成以及編寫Java代碼時的一些常見的內存泄漏陷阱等等都會造成內存泄漏,但是要在開發階段完成找出造成泄漏的代碼是非常困難的。
在大型企業系統中,Java代碼中的內存泄漏是常見而且難于解決的問題。這些泄漏問題通常是在最不愿意它發生的正式生產環境中發現的,而且它也很難于在開發與測試環境中得到重現。這是為什么呢?生產環境中的系統需要處理更大量的數據,而且有可能在運行很長時間后才會發現 Java堆在緩慢地增長。最終,導致系統內存耗盡。
因此本文介紹一種新工具BEA JRockit Mission Control,用來診斷泄漏并指出根本原因。該工具的開銷非常小,因此可以使用它來尋找生產環境中的系統的內存泄漏。
BEA JRockit Mission Control(以下簡稱為JRMC)于2005年12月面世,并從JRockit R26.0.0版本開始捆綁了這個工具套件,目前最新的版本是2.0.1。它是一組以極低的開銷來監控、管理和分析生產環境中的應用程序的工具。它包括三個獨立的應用程序:內存泄漏監測器(Memory Leak Detector)、JVM運行時分析器(Runtime Analyzer)和管理控制臺(Management Console)。
下面的架構圖描述了BEA JRockit Mission Control 2.0工具套件之間的關系。
性能調優工具BEA JRockit Mission Control圖-1" src="http://www.anti-gravitydesign.com/uploads/2008/06/47162_200806131510251XNcF.gif">
JRockit Management Console是一個基于JMX的控制臺,用于監控和管理多個JRockit實例,提供至關重要的狀態數據和控制JRockit JVM的運行時特性的方法。它捕獲并顯示關于垃圾收集器(GC)暫停、內存、堆使用和CPU負載的實時數據,以及部署在JVM內部MBean服務器上注冊的所有JMX MBean所公開的信息。JVM管理包括對CPU相似性、垃圾收集策略和內存池大小的動態控制,還包括一個開銷低的方法分析器和一個異常計數器。
原文轉自:http://www.anti-gravitydesign.com