您好,登錄后才能下訂單哦!
本篇內容主要講解“JVM內存優化怎么做”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“JVM內存優化怎么做”吧!
在Eclipse上安裝MAT(MemoryAnalyzer Tool)插件,官網鏈接(https://wiki.eclipse.org/MemoryAnalyzer)
步驟如下:
點擊Help,Install New Soft,就出現了以下Install界面:然后我們點擊ADD,在彈出的框中填上Mat插件的地址:http://download.eclipse.org/mat/1.8/update-site/,確定后,
點擊Select All,點擊Next,之后就一直確定,就能安裝了。安裝之后需要重啟Eclipse.
分析命令
// -Xms8m -Xmx8m -XX:+PrintGCDetails // 打印垃圾回收信息 //-Xms8m -Xmx32m -XX:+HeapDumpOnOutOfMemoryError //生成內存快照文件 查看錯誤信息
package com.shi.jvm; import java.util.ArrayList; import java.util.List; /** * Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main" * @author shiye * GC跟蹤: -verbose:gc -XX:+PrintGCDetails 打印GC詳細信息 -XX:+PrintGCTimeStamps 打印CG發生的時間戳 -Xloggc:log/gc.log 指定GC log的位置,以文件輸出 幫助開發人員分析問題 堆: -XX:+PrintHeapAtGC 每次一次GC后,都打印堆信息 -XX:+TraceClassLoading 監控類的加載 -XX:+PrintClassHistogram 按下Ctrl+Break后,打印類的信息: -Xmx –Xms 指定最大堆和最小堆 -Xmx20m -Xms5m -Xmn 設置新生代大小 -XX:NewRatio 新生代(eden+2*s)和老年代(不包含永久區)的比值 新生代:老年代=1:4,即年輕代占堆的1/5 -XX:SurvivorRatio 設置兩個Survivor區和eden的比 Survivor :eden=2:8,即一個Survivor占年輕代的1/10 -Xmx20m -Xms20m -Xmn1m -XX:+PrintGCDetails 結果: Exception in thread "main" [Full GC (Ergonomics) java.lang.OutOfMemoryError: GC overhead limit exceeded [PSYoungGen: 512K->0K(1024K)] [ParOldGen: 18595K->517K(18944K)] 19107K->517K(19968K), [Metaspace: 2625K->2625K(1056768K)], 0.0077164 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] at java.lang.Integer.toString(Unknown Source) at java.lang.String.valueOf(Unknown Source) at com.shi.jvm.OOMTest.main(OOMTest.java:58) -XX:+HeapDumpOnOutOfMemoryError OOM時導出堆到文件 -XX:+HeapDumpPath 導出OOM的路徑 -Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump XX:OnOutOfMemoryError 在OOM時,執行一個腳本 "-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p“ 當程序OOM時,在D:/a.txt中將會生成線程的dump 可以在OOM時,發送郵件,甚至是重啟程序 總結:根據實際事情調整新生代和幸存代的大小 官方推薦新生代占堆的3/8 幸存代占新生代的1/10 在OOM時,記得Dump出堆,確保可以排查現場問題 棧: -XX:PermSize -XX:MaxPermSize 設置永久區的初始空間和最大空間 他們表示,一個系統可以容納多少個類型 -Xss 通常只有幾百K 決定了函數調用的深度 每個線程都有獨立的棧空間 局部變量、參數 分配在棧上 * */ public class OOMTest { public static void main(String[] args) { List<String> list = new ArrayList(); int i = 0; while(true) { //public native String intern(); list.add(String.valueOf(i++).intern()); } } }
到此,相信大家對“JVM內存優化怎么做”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。