这篇文章是我们原来的GC超出限制的问题模式帖子的延续。 正确的Java堆分析对于消除O​​utOfMemoryError:GC开销问题至关重要。 如果您不熟悉此Java HotSpot 1.6错误,建议您首先阅读有关此主题的第一篇文章 。
本文将为您提供一个示例程序和一个教程,介绍如何在OutOfMemoryError之后使用Memory Analyzer分析Java HotSpot堆的占用空间。 我强烈建议您使用本教程自己执行和分析堆转储,以更好地理解这些原理。
故障排除工具
**所有这些工具都可以免费下载**
  • Eclipse Indigo发布
  • 通过IBM Support Assistant 4.1进行的内存分析器(热点堆转储分析)
  • Java虚拟机:Windows HotSpot JRE 1.6.0_24 64位
示例Java程序
下面的简单Java示例程序将用于触发OutOfMemoryError; 使我们能够分析生成的HotSpot堆转储文件。 只需创建一个新的Java类:JVMOutOfMemoryErrorSimulator.java到您选择的Eclipse项目,然后重命名或保持当前包不变。
该程序基本上是在Map数据结构内创建多个String实例,直到Java Heap耗尽为止。
**请确保您的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 –设置JVM启动参数
首先,按照以下步骤设置Eclipse Java运行时参数。 对于我们的示例,我们在Eclipse IDE外部使用了Java Jap最大容量为512 MB的外部JRE 1.6。
允许我们生成堆转储的主要JVM参数是-XX:+ HeapDumpOnOutOfMemoryError,它告诉JVM在OutOfMemoryError条件之后生成堆转储。
步骤#2 –运行示例Java程序
下一步是运行我们的Java程序。 根据您的计算机规格,此程序将在存在OutOfMemoryError之前运行5-30秒。
如您所见,JVM生成了一个堆转储文件java_pid3880.hprof。 现在是时候启动“内存分析器”工具并分析JVM堆转储了。

步骤#3 –加载堆转储
分析堆转储是一项简单或非常复杂的分析活动。 本教程的目的是为您提供堆转储分析的基础知识。 有关堆转储的更多分析,请参考此博客的其他案例研究。
步骤#4 –分析堆转储
下面是快照和分析步骤,可用来了解我们在示例Java程序中模拟的内存泄漏。
如您所见,使用Memory Analyzer工具进行的堆转储分析能够轻松识别我们主要的泄漏Java类和数据结构。
结论
我希望这个简单的Java程序和“堆转储”分析教程能够帮助您了解使用原始堆转储数据进行Java堆分析的基本原理。 处理OutOfMemoryError:GC开销问题时,此分析非常重要,因为这些是Java Heap占位面积/调整问题的Java Heap泄漏的症状。
参考: 超出了GC开销限制– Java EE支持模式和Java教程博客中的JCG合作伙伴 Pierre-Hugues Charbonneau进行了Java 堆分析 。

翻译自: https://www.javacodegeeks.com/2012/05/gc-overhead-limit-exceeded-java-heap.html

超出了GC开销限制– Java堆分析相关推荐

  1. java超出gc开销限制_超出了GC开销限制– Java堆分析

    java超出gc开销限制 这篇文章是我们原来的GC开销超出问题模式的延续. 正确的Java堆分析对于消除O​​utOfMemoryError:GC开销问题至关重要. 如果您不熟悉此Java HotSp ...

  2. linux java性能监控工具_性能监控工具以及java堆分析OOM

    一.性能监控工具 1.系统性能监控 Linux -确定系统运行的整体状态,基本定位问题所在 -uptime: ------系统时间 ------运行时间(例子中为127天) ------连接数(每个终 ...

  3. java 堆 分析_Java堆分析 jmap+jhat

    Java堆分析 jmap+jhat 最近在使用DataSync做数据迁移,执行了10天+,进程还未结束,也未出现错误日志,所以就看看是不是哪里卡住了... jmap命令: -dump:[live,]f ...

  4. jhat命令的html页面,jvm 指令工具 jhat 命令(Java堆分析工具)

    jhat 简介 jhat 全称:Java Heap Analyse Tool(Java堆分析工具),jhat 也是 jdk 内置的工具之一. 功能:主要是用来分析java堆的命令,可以将堆中的对象以 ...

  5. 【Java 虚拟机原理】垃圾回收算法( Java VisualVM 工具 | 安装 Visual GC 插件 | 使用 Java VisualVM 分析 GC 内存 )

    文章目录 一.Java VisualVM 工具安装 Visual GC 插件 二.使用 Java VisualVM 分析 GC 内存 一.Java VisualVM 工具安装 Visual GC 插件 ...

  6. java堆分析神器MAT

    Memory Analyzer(MAT) 基于Eclipse的软件 http://www.eclipse.org/mat/ 转载于:https://www.cnblogs.com/SEC-fsq/p/ ...

  7. java dump分析工具_java性能分析与常用工具

    本次源码已放在Github:https://github.com/nateshao/jvm-tuning 个人博客 https://nateshao.gitee.io http://www.nates ...

  8. 一步步优化JVM四:决定Java堆的大小以及内存占用

    到目前为止,还没有做明确的优化工作.只是做了初始化选择工作,比如说:JVM部署模型.JVM运行环境.收集哪些垃圾回收器的信息以及需要遵守垃圾回收原则.这一步将介绍如何评估应用需要的内存大小以及Java ...

  9. JVM优化:决定Java堆的大小以及内存占用

    转载:https://blog.csdn.net/zhoutao198712/article/details/7783070    到目前为止,还没有做明确的优化工作.只是做了初始化选择工作,比如说: ...

最新文章

  1. Java回调机制解析
  2. DropdownList 赋初始值问题
  3. 如何把一个软件嵌入另一个软件_自动化正在成为一个“软件”行业
  4. 不同语言,系统通过共享内存方式实现信息交互
  5. Mysql中bigint、int、mediumint、smallint 和 tinyint的取值范围
  6. html清除div虚线,纯CSS去除按钮以及链接点击时虚线
  7. DiscuzX系列命令执行分析公开(三连弹)
  8. 从零开始学前端:CSS字体属性和文本属性 --- 今天你学习了吗?(CSS:Day08)
  9. nginx ---- 背景介绍及环境准备
  10. CentOS安装Etcd
  11. Codeigniter处理用户登录验证后URL跳转
  12. 翼支付高速发展背后,甜橙金融的云化智能变革
  13. Unity3d Ugui 20 Grid Layout Group Aspect Ratio Fitter
  14. docker安装青龙面板薅羊毛(新手教程,大佬可略过)
  15. 学习笔记1 - ResNet网络学习
  16. Java实现 LeetCode 526 优美的排列(DFS)
  17. SAP程序设计/黄佳:图书:价格比较:琅琅比价网
  18. 数据收集整理(长期更新)
  19. 怎样才能找回电脑上误删的文件呢?
  20. JHU ICBM DTI Atlas纤维束模板介绍

热门文章

  1. super 和 this 关键字的比较+调用构造器(this)+动态绑定
  2. 托管 非托管_如何在托管的Kubernetes上备份Neo4J
  3. apache.camel_Apache Camel 3.1 –即将推出更多骆驼核心优化
  4. java 管理多个进程_管理多个Java安装
  5. vaadin_Vaadin提示:以声明方式构建UI
  6. akka和rabbitmq_Akka Notes –演员记录和测试
  7. javafx html5_JavaFX技巧5:可观察
  8. adf 自动输稿器_在ADF实体PK属性中使用MySQL自动增量PK列
  9. JavaFX技巧30:带有DropShadow的ScrollPane
  10. 摆脱“空”检查的盛宴:使用JSON Patch正确执行PATCH