生活随笔
收集整理的這篇文章主要介紹了
java超出gc开销限制_超出了GC开销限制– Java堆分析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
java超出gc開銷限制
這篇文章是我們?cè)瓉淼腉C開銷超出問題模式的延續(xù)。 正確的Java堆分析對(duì)于消除O??utOfMemoryError:GC開銷問題至關(guān)重要。 如果您不熟悉此Java HotSpot 1.6錯(cuò)誤,建議您首先閱讀有關(guān)此主題的第一篇文章 。 本文將為您提供一個(gè)示例程序和一個(gè)教程,介紹如何在OutOfMemoryError之后使用Memory Analyzer分析Java HotSpot堆的占用空間。 我強(qiáng)烈建議您使用本教程自己執(zhí)行和分析堆轉(zhuǎn)儲(chǔ),以更好地理解這些原理。
故障排除工具 **所有這些工具都可以免費(fèi)下載**
- Eclipse Indigo發(fā)布
- 通過IBM Support Assistant 4.1進(jìn)行的內(nèi)存分析器(熱點(diǎn)堆轉(zhuǎn)儲(chǔ)分析)
- Java虛擬機(jī):Windows HotSpot JRE 1.6.0_24 64位
示例Java程序 下面的簡(jiǎn)單Java示例程序?qū)⒂糜谟|發(fā)OutOfMemoryError; 使我們能夠分析生成的HotSpot堆轉(zhuǎn)儲(chǔ)文件。 只需在您選擇的Eclipse項(xiàng)目中創(chuàng)建一個(gè)新的Java類:JVMOutOfMemoryErrorSimulator.java,然后重命名或保持當(dāng)前包不變即可。 該程序基本上是在Map數(shù)據(jù)結(jié)構(gòu)內(nèi)創(chuàng)建多個(gè)String實(shí)例,直到Java Heap耗盡為止。 **請(qǐng)確保您的Eclipse編譯器和JRE為1.6 ** package org.ph.javaee.javaheap;import java.util.Map;
import java.util.HashMap;/**
* JVMOutOfMemoryErrorSimulator
*
* @author PH
*
*/public class JVMOutOfMemoryErrorSimulator {private final static int NB_ITERATIONS = 500000;// ~1 KB data footprint private final static String LEAKING_DATA_PREFIX = "datadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadat
adatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadat
adatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadat
adatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadat
adatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadat
adatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadata";// Map used to stored our leaking String instances private static Map<String, String> leakingMap;static { leakingMap = new HashMap<String, String>(); }/** * @param args */ public static void main(String[] args) {System.out.println("JVM OutOfMemoryError Simulator 1.0"); System.out.println("Author: Pierre-Hugues Charbonneau"); System.out.println(" http ://javaeesupportpatterns.blogspot.com/");try {for (int i = 0; i < NB_ITERATIONS; i++) {String data = LEAKING_DATA_PREFIX + i;// Add data to our leaking Map data structure... leakingMap.put(data, data);}} catch (Throwable any) { if (any instanceof java.lang.OutOfMemoryError){System.out.println("OutOfMemoryError triggered! "+ any.getMessage() + " [" + any + "]");} else { System.out.println("Unexpected Exception! " + any.getMessage() + " [" + any + "]"); } }System.out.println("simulator done!"); }}
步驟#1 –設(shè)置JVM啟動(dòng)參數(shù) 首先,按照以下步驟設(shè)置Eclipse Java運(yùn)行時(shí)參數(shù)。 對(duì)于我們的示例,我們?cè)贓clipse IDE外部使用了Java Jap最大容量為512 MB的外部JRE 1.6。 允許我們生成堆轉(zhuǎn)儲(chǔ)的主要JVM參數(shù)是-XX:+ HeapDumpOnOutOfMemoryError,它告訴JVM在OutOfMemoryError條件之后生成堆轉(zhuǎn)儲(chǔ)。
步驟#2 –運(yùn)行示例Java程序 下一步是運(yùn)行我們的Java程序。 根據(jù)您的計(jì)算機(jī)規(guī)格,此程序?qū)⒃诖嬖贠utOfMemoryError的情況下運(yùn)行5-30秒。 如您所見,JVM生成了一個(gè)堆轉(zhuǎn)儲(chǔ)文件java_pid3880.hprof。 現(xiàn)在該觸發(fā)內(nèi)存分析器工具并分析JVM堆轉(zhuǎn)儲(chǔ)了。
步驟#3 –加載堆轉(zhuǎn)儲(chǔ) 分析堆轉(zhuǎn)儲(chǔ)是一項(xiàng)簡(jiǎn)單或非常復(fù)雜的分析活動(dòng)。 本教程的目的是為您提供堆轉(zhuǎn)儲(chǔ)分析的基礎(chǔ)知識(shí)。 有關(guān)堆轉(zhuǎn)儲(chǔ)的更多分析,請(qǐng)參考此博客的其他案例研究。
步驟#4 –分析堆轉(zhuǎn)儲(chǔ) 下面是快照和分析步驟,可用來了解我們?cè)谑纠齁ava程序中模擬的內(nèi)存泄漏。 如您所見,使用Memory Analyzer工具進(jìn)行的堆轉(zhuǎn)儲(chǔ)分析能夠輕松識(shí)別我們泄漏的主要Java類和數(shù)據(jù)結(jié)構(gòu)。
結(jié)論 我希望這個(gè)簡(jiǎn)單的Java程序和“堆轉(zhuǎn)儲(chǔ)”分析教程能夠幫助您了解使用原始堆轉(zhuǎn)儲(chǔ)數(shù)據(jù)進(jìn)行Java堆分析的基本原理。 處理OutOfMemoryError:GC開銷問題時(shí),此分析非常重要,因?yàn)檫@些是Java Heap占位符/調(diào)整問題的Java Heap泄漏的癥狀。
參考: 超出了GC開銷限制– Java EE支持模式和Java教程博客中的JCG合作伙伴 Pierre-Hugues Charbonneau進(jìn)行了Java 堆分析 。
翻譯自: https://www.javacodegeeks.com/2012/05/gc-overhead-limit-exceeded-java-heap.html
java超出gc開銷限制
總結(jié)
以上是生活随笔為你收集整理的java超出gc开销限制_超出了GC开销限制– Java堆分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。