簡化Java內存分析

作為一名典型的Java開發人員,除了遵循關閉連接,流等典型的最佳實踐外,我從未監視過應用程序的內存使用情況。最近,我們在JBoss服務器中遇到了一些問題,不得不深入研究內存管理Java中最好的事情之一是,創建對象時,不需要開發人員處理內存分配。 JVM為我們做到了。 大多數時候,我們只需要堆內存和垃圾收集器的外層知識。 我將分享一些非常有趣的調查。 我是一個巨大的話題,我是從Web應用程序開發人員的角度寫的,我認為我們應該了解的所有最低要求。 工具

有很多不錯的工具可用來剖析Java應用程序,其中一些是,

1. 您的套件Java Profiler
2. JProfiler
3. Eclipse MAT 4. 可視VM

其中,您的工具包和JProfilers需要許可證,其他則可以免費使用產品。 我們將使用VisualVM。 它是一個簡單但功能強大的工具,并捆綁在JDK中。 它具有可下載和使用的插件功能列表。 要開始使用VisualVM,請轉到<JDK_HOME> \ bin并運行jvisualvm.exe 。 我發現以下文章對繼續學習很有用。

1. 使用VisualVM進行分析
2. VisualVM性能調整工具
3. 如何在不崩潰的情況下獲取VisualVM來配置JBoss

由于我們在這里討論內存,因此請確保按照本文所述,在VisualVM上安裝Visual GC插件。

設置階段– JVM內存結構

JVM內存分為三部分,如下圖所示。 在我們的應用程序中,我們關注堆內存。 我們可以使用參數將此值輸入到JVM,

-Xmx <size> –設置最大Java堆大小
-Xms <size> –設置初始Java堆大小

非堆內存存儲每個類的結構,例如運行時常量池,字段和方法數據,以及方法和構造函數的代碼以及內部字符串。

這是一篇不錯的文章,其中包含有關JVM內存大小的更多詳細信息。 在這里閱讀Javin關于JVM堆空間的文章。

一種常見的混淆是關于堆棧內存和堆內存 。 此處對此進行了很好的解釋。堆棧值僅存在于創建它們的函數范圍內。一旦返回,它們將被丟棄。 Java僅將原語存儲在堆棧中。 這樣可使堆棧變小,并有助于使單個堆棧幀變小,從而允許更多的嵌套調用。 對象是在堆上創建的,并且只有引用(即原語)在堆棧上傳遞。

現在,讓我們變得真實。 在Visual GC的圖像下方給出,這是前面提到的VisualVM內部的一個插件。 我們在這里看到許多圖形輸出的詳細能解密,請點擊這里 。

游戲開始–應用程序運行時會發生什么

創建對象時,它們位于Eden內部。 運行垃圾收集器(GC)時,如果對象已死(意味著它們不是活動引用),則將其清除,否則將其移至S1 (生存空間1)或S2 這稱為GC循環。 內部GM算法確定GC循環的頻率。 堆內存的Eden + S1 + S2部分稱為Young generation。 在固定數量的GC循環中幸存下來的對象將移入“ 舊一代”空間。 大多數Java對象死于嬰兒,并且永遠都不會到達OldGen。這通常包括局部變量,這些局部變量在方法執行后會刷新。

老一代內部的GC循環頻率比年輕一代要少得多。老一代對象的典型示例是單例,緩存的對象和其他應用程序廣泛使用的數據。

當事情沒有按照計劃進行時

在典型的應用中,Old Gen空間內部的變化較小。 如果即使在GC周期之后,Old Gen空間也隨著時間線性增長,則將導致OutOfMemoryError。 這可能表明代碼內有內存泄漏。 但是,我們可能需要使用探查器來找出造成這種情況的確切原因。 這是Dzon上有關Java EE企業性能問題的某些原因的文章。

這些是執行應用程序時JVM內存的組織方式和反應的基本構建塊。 從這一點開始,有很多主題,包括調整內存參數和垃圾收集器。 我將添加一些與此相關的有用資源。

1. Java性能調優,性能分析和內存管理
2. InfoQ演示:診斷Web應用程序內存不足錯誤
3. InfoQ演示:我所學到的有關JVM性能調整@twitter的一切 4. InfoQ演示:極限性能Java 5. Java理論與實踐:垃圾收集與性能

參考: Java內存概要分析(由Java的JCG合作伙伴 Manu PK 簡化 ,位于“面向對象的生活”博客中)。


翻譯自: https://www.javacodegeeks.com/2012/09/java-memory-model-simplified.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371281.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371281.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371281.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nyoj 1129 Salvation 模擬

思路&#xff1a;每個坐標有四種狀態&#xff0c;每個點對應的每種狀態只能走一個方向&#xff0c;如果走到一個重復的狀態說明根本不能走到終點&#xff0c;否則繼續走即可。 坑點&#xff1a;有可能初始坐標四周都是墻壁&#xff0c;如果不判斷下可能會陷入是死循環。 貼上測…

詳解mysql數據庫的啟動與終止_詳解MySQL數據庫的啟動與終止(一)

由于MySQL服務器具有多種安裝分發&#xff0c;而且能夠運行在多種操作平臺之上&#xff0c;因此它的啟動與停止的方法也多種多樣。你可以根據實際情況使用其中的一種。在你安裝、升級或者維護系統時&#xff0c;你可能需要多次啟動和終止服務器&#xff0c;你需要了解啟動和終止…

easyui 插入中間行

function inserrow() {var index_dx 0;var index_lt 0;var rows $(#dg).datagrid(getRows)//獲取當前的數據行前期數據準備for (var i 0; i < rows.length; i) {if (rows[i][運營商] 電信) {index_dx i;dxptjss_dx parseInt(rows[i][短信平臺接收數]);} else {index_…

使用JNA的透明JFrame

在“ 使JFrame透明”中&#xff0c;我展示了一種使用AWTUtilities類使框架透明的方法。 但是使用該類會導致訪問限制編譯時錯誤&#xff0c;該文章中還顯示了Eclipse中的解析。 現在&#xff0c;這里是使用Java本機的版本。 我使用Java本機訪問&#xff08;JNA&#xff09;庫來…

Problem: Query on the tree(二分+劃分樹)

題目鏈接&#xff1a; Problem: Query on the tree Time limit: 1s Mem limit: 64 MB Problem DescriptionThere is a tree with n node, labeled from 1 to n, and the root of the tree is 1. For every node i, if its father is j, its value vivj*i%20161119, the…

day04_09 while循環03

練習題: 3.如何輸入一個如下的直角三角形,用戶指定輸出行數:(如果上下反轉,右如何實現?) ********** 以下是自己的思路,沒有按照上課老師的思路,反正經過不斷的測試改進得出的算法 num int(input("請輸入行數")) line 1 while line < num1:lie 1 while lie &l…

idal 創建springboot 項目_手把手的SpringBoot教程,SpringBoot創建web項目(四)

在實際的開發過程中&#xff0c;我們需要前端頁面向Java端提交請求&#xff0c;這些請求一般分為get方式和post方式&#xff0c;不管是哪一種方式&#xff0c;一般都會攜帶一些參數。這一節&#xff0c;我們來演示一下如何給Controller傳遞參數。代碼&#xff1a;RestControlle…

JavaOne 2012:Lambda之路

我最熱切期待的JavaOne 2012演講之一是Brian Goetz的“通往Lambda的道路”。 昨晚的技術主題演講中的Lambda味道僅增加了預期。 這是在希爾頓廣場A / B舉行的&#xff0c;距離我上次在金門大橋A / B / C參加的演講僅幾步之遙。 我原本希望打包相對較大的Plaza A / B&#xff08…

沉浸式go-cache源碼閱讀!

大家好&#xff0c;我是豆小匠。 這期來閱讀go-cache的源碼&#xff0c;了解本地緩存的實現方式&#xff0c;同時掌握一些閱讀源碼的技巧~ 1. 源碼獲取 git clone https://github.com/patrickmn/go-cache.git用Goland打開可以看到真正實現功能的也就兩個go文件&#xff0c;ca…

CoreAnimation 變換

CoreAnimation 變換 CoreAnimation 目錄 博客園MakeDown支持不佳,如有需要請進GitHub 本片博客主要內容: 仿射變換 - CGAffineTransform3D變換 - CATransform3D仿射變換 - CGAffineTransform CGAffineTransform 是用于二維空間的旋轉,縮放和平移的屬性.首先展示一個簡單的樣例,…

20170907wdVBA_GetCellsContentToExcel

WORD 加載項 代碼模板 Dim cmdBar As CommandBar, cmdBtn As CommandBarControl Const cmdBtnCap As String "批量提取操作步驟"Sub AutoExec()Call DelCmdBtnCall AddCmdBtnEnd Sub Sub AutoExit()Call DelCmdBtn End SubSub AddCmdBtn()Set cmdBar Application.C…

mysql 5.7 mirror_Centos7 Docker離線部署Mysql5.7

1 環境信息查看系統內核[rootlocalhost /]# cat /etc/redhat-releaseCentOS Linux release 7.5.1804 (Core)2 虛擬機拉取鏡像此處資源獲取在虛擬機中進行&#xff0c;完成后上傳到服務器安裝2.1 拉取mysql5.7鏡像[rootlocalhost /]# docker pull mysql:5.72.2 導出鏡像[rootloc…

Java中的簡單REST客戶端

如今&#xff0c;大多數用于與某些服務器通信的移動應用程序都使用REST服務。 這些服務也是與JavaScript或jQuery一起使用的常見做法。 現在&#xff0c;我知道在Java中為REST服務創建客戶端的2種方法&#xff0c;在本文中&#xff0c;我將嘗試演示這兩種方法&#xff0c;希望它…

3.20 下午

閱讀《藝術學概論》 戲劇沖突是戲劇的靈魂 沖突包括&#xff1a;人物性格的沖突、行為的沖突、 思想感情的沖突乃至心理狀態的沖突等等 轉載于:https://www.cnblogs.com/bgd140206110/p/6590005.html

華為root工具_華為Mate9解鎖后無法ROOT 需要手動刷入Recovery怎么辦【解決方法】...

很多朋友手機到手之后&#xff0c;都希望能夠ROOT使用更多的系統功能。近日有網友向小編詢問&#xff0c;為何華為Mate9解鎖后無法ROOT&#xff0c;明明已經通過官方的解鎖教程解鎖的&#xff0c;但是之后使用“大師”等第三方刷機工具&#xff0c;無法ROOT。其實ROOT的關鍵就在…

JAX-WS入門

JAX-WS代表XML Web Services的Java API。 它是一種Java編程語言API&#xff0c;用于創建Web服務和使用XML進行通信的客戶端。 這篇文章是JAX-WS的快速入門。 先決條件 GlassFish與Eclipse集成在一起 。 創建JAX-WS Web服務 1.在Eclipse中創建一個名為“ com.eviac.blog.jax…

canvas 圖片反色

代碼實例&#xff1a; <!DOCTYPE HTML> <html> <head><meta charset"utf-8"><title>圖片反色</title><style type"text/css">body{ background:black;}#c1{ background:white;}</style><script type&q…

python中的文件父路徑怎么表達_python中的文件父路徑怎么表達_如何在Python中訪問父目錄...

所以我有一個朋友給我的Python腳本&#xff0c;但是我沒有Python的經驗。代碼如下&#xff1a;from os import path, chdir, listdir, mkdir, getcwdfrom sys import argvfrom zipfile import ZipFilefrom time import sleep#Defines what extensions to look for within the f…

Maven的中央倉庫地址

www.mvnrepository.com轉載于:https://www.cnblogs.com/j-liu3323/p/6590435.html

Spring–添加AOP支持

我聽到了一個有關一位高級&#xff08;且酬勞頗豐&#xff09;軟件工程師的故事。 他的任務是記錄他正在研究的項目中每個控制器中的每個方法。 工程師重寫了所有控制器方法&#xff0c;因此使用如下代碼&#xff1a; RequestMapping(method RequestMethod.GET)public String …