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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

简化Java内存分析

發(fā)布時間:2023/12/3 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简化Java内存分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
作為一名典型的Java開發(fā)人員,除了遵循關(guān)閉連接,流等典型的最佳實踐外,我從未監(jiān)視過應(yīng)用程序的內(nèi)存使用情況。最近,我們在JBoss服務(wù)器中遇到了一些問題,不得不深入研究內(nèi)存管理Java中最好的事情之一是,創(chuàng)建對象時,不需要開發(fā)人員處理內(nèi)存分配。 JVM為我們做到了。 大多數(shù)時候,我們只需要堆內(nèi)存和垃圾收集器的外層知識。 我將分享一些非常有趣的調(diào)查。 我是一個巨大的話題,我是從Web應(yīng)用程序開發(fā)人員的角度寫的,我認(rèn)為我們應(yīng)該了解的所有最低要求。 工具

有很多不錯的工具可用來剖析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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。