简化Java内存分析
有很多不錯的工具可用來剖析Java應(yīng)用程序,其中一些是,
1. 您的套件Java Profiler
2. JProfiler
3. Eclipse MAT 4. 可視VM
其中,您的工具包和JProfilers需要許可證,其他則可以免費使用產(chǎn)品。 我們將使用VisualVM。 它是一個簡單但功能強(qiáng)大的工具,并捆綁在JDK中。 它具有可下載和使用的插件功能列表。 要開始使用VisualVM,請轉(zhuǎn)到<JDK_HOME> \ bin并運行jvisualvm.exe 。 我發(fā)現(xiàn)以下文章對繼續(xù)學(xué)習(xí)很有用。
1. 使用VisualVM進(jìn)行分析
2. VisualVM性能調(diào)整工具
3. 如何在不崩潰的情況下獲取VisualVM來配置JBoss
由于我們在這里討論內(nèi)存,因此請確保按照本文所述,在VisualVM上安裝Visual GC插件。
設(shè)置階段– JVM內(nèi)存結(jié)構(gòu)
JVM內(nèi)存分為三部分,如下圖所示。 在我們的應(yīng)用程序中,我們關(guān)注堆內(nèi)存。 我們可以使用參數(shù)將此值輸入到JVM,
-Xmx <size> –設(shè)置最大Java堆大小
-Xms <size> –設(shè)置初始Java堆大小
非堆內(nèi)存存儲每個類的結(jié)構(gòu),例如運行時常量池,字段和方法數(shù)據(jù),以及方法和構(gòu)造函數(shù)的代碼以及內(nèi)部字符串。
這是一篇不錯的文章,其中包含有關(guān)JVM內(nèi)存大小的更多詳細(xì)信息。 在這里閱讀Javin關(guān)于JVM堆空間的文章。
一種常見的混淆是關(guān)于堆棧內(nèi)存和堆內(nèi)存 。 此處對此進(jìn)行了很好的解釋。堆棧值僅存在于創(chuàng)建它們的函數(shù)范圍內(nèi)。一旦返回,它們將被丟棄。 Java僅將原語存儲在堆棧中。 這樣可使堆棧變小,并有助于使單個堆棧幀變小,從而允許更多的嵌套調(diào)用。 對象是在堆上創(chuàng)建的,并且只有引用(即原語)在堆棧上傳遞。
現(xiàn)在,讓我們變得真實。 在Visual GC的圖像下方給出,這是前面提到的VisualVM內(nèi)部的一個插件。 我們在這里看到許多圖形輸出的詳細(xì)能解密,請點擊這里 。
游戲開始–應(yīng)用程序運行時會發(fā)生什么
創(chuàng)建對象時,它們位于Eden內(nèi)部。 運行垃圾收集器(GC)時,如果對象已死(意味著它們不是活動引用),則將其清除,否則將其移至S1 (生存空間1)或S2 。 這稱為GC循環(huán)。 內(nèi)部GM算法確定GC循環(huán)的頻率。 堆內(nèi)存的Eden + S1 + S2部分稱為Young generation。 在固定數(shù)量的GC循環(huán)中幸存下來的對象將移入“ 舊一代”空間。 大多數(shù)Java對象死于嬰兒,并且永遠(yuǎn)都不會到達(dá)OldGen。這通常包括局部變量,這些局部變量在方法執(zhí)行后會刷新。
老一代內(nèi)部的GC循環(huán)頻率比年輕一代要少得多。老一代對象的典型示例是單例,緩存的對象和其他應(yīng)用程序廣泛使用的數(shù)據(jù)。
當(dāng)事情沒有按照計劃進(jìn)行時
在典型的應(yīng)用中,Old Gen空間內(nèi)部的變化較小。 如果即使在GC周期之后,Old Gen空間也隨著時間線性增長,則將導(dǎo)致OutOfMemoryError。 這可能表明代碼內(nèi)有內(nèi)存泄漏。 但是,我們可能需要使用探查器來找出造成這種情況的確切原因。 這是Dzon上有關(guān)Java EE企業(yè)性能問題的某些原因的文章。
這些是執(zhí)行應(yīng)用程序時JVM內(nèi)存的組織方式和反應(yīng)的基本構(gòu)建塊。 從這一點開始,有很多主題,包括調(diào)整內(nèi)存參數(shù)和垃圾收集器。 我將添加一些與此相關(guān)的有用資源。
1. Java性能調(diào)優(yōu),性能分析和內(nèi)存管理
2. InfoQ演示:診斷Web應(yīng)用程序內(nèi)存不足錯誤
3. InfoQ演示:我所學(xué)到的有關(guān)JVM性能調(diào)整@twitter的一切 4. InfoQ演示:極限性能Java 5. Java理論與實踐:垃圾收集與性能
參考: Java內(nèi)存概要分析(由Java的JCG合作伙伴 Manu PK 簡化 ,位于“面向?qū)ο蟮纳睢辈┛椭?#xff09;。
翻譯自: https://www.javacodegeeks.com/2012/09/java-memory-model-simplified.html
總結(jié)
以上是生活随笔為你收集整理的简化Java内存分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vivo手机进不了系统怎么办
- 下一篇: JavaOne 2012:Lambda之