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

java超出gc开销限制

这篇文章是我们原来的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堆转储文件。 只需在您选择的Eclipse项目中创建一个新的Java类:JVMOutOfMemoryErrorSimulator.java,然后重命名或保持当前包不变即可。
该程序基本上是在Map数据结构内创建多个String实例,直到Java Heap耗尽为止。
GC_overhead_Eclipse_Project
**请确保您的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条件之后生成堆转储。
GC_overhead_Run_Configuration
GC_overhead_Run_Configuration_JVM
步骤#2 –运行示例Java程序
下一步是运行我们的Java程序。 根据您的计算机规格,此程序将在存在OutOfMemoryError的情况下运行5-30秒。
GC_overhead_Run_Java_Program_Exec
如您所见,JVM生成了一个堆转储文件java_pid3880.hprof。 现在该触发内存分析器工具并分析JVM堆转储了。

步骤#3 –加载堆转储
分析堆转储是一项简单或非常复杂的分析活动。 本教程的目的是为您提供堆转储分析的基础知识。 有关堆转储的更多分析,请参考此博客的其他案例研究。
GC_overhead_Heap_Dump_analysis1
GC_overhead_Heap_Dump_analysis2
GC_overhead_Heap_Dump_analysis3
步骤#4 –分析堆转储
下面是快照和分析步骤,可用来了解我们在示例Java程序中模拟的内存泄漏。
GC_overhead_Heap_Dump_analysis4
GC_overhead_Heap_Dump_analysis5
GC_overhead_Heap_Dump_analysis6
GC_overhead_Heap_Dump_analysis7
如您所见,使用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

java超出gc开销限制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java自定义一个timeout,Timeout操作符 RxJava 学习笔记二十一

timeout用于检测在给定时间内observables没有及时响应。如果指定的时间量没有发出任何项目&#xff0c;则超时会使observables失败并出现TimeoutException。我们将从debounce的示例中重用我们的observable来演示超时。输出&#xff1a;只要值不超过200ms&#xff0c;就会输出。…

用xshell ssh连接测试服务器时候出的问题

问题还原&#xff1a;用ssh连接测试服务器 给我结结实实报了个错 FBIwarning: ----------------------------------------------------------------------------------------------------------------------------以上 问题还原 解决过程&#xff1a;百度 博客地址http://blog.…

maven集成spring_Maven集成测试和Spring Restful Services

maven集成spring介绍 我的原始博客通过一个非常简单的示例展示了如何分离Maven单元和集成测试。 http://johndobie.blogspot.com/2011/06/seperating-maven-unit-integration-tests.html此后&#xff0c;许多人要求我提供比最初使用的示例更实际的示例。 这篇文章显示了如何在实…

WebService.asmx架设后,显示调用按钮的方法

我们在VS本地调试WebService的时候&#xff0c;页面是可以调试的&#xff0c;如下图 但是在发布以后&#xff0c;通过浏览器访问服务器上的地址&#xff0c;是不能调试你的程序的&#xff0c;就变成了这个样子&#xff1a; 可以通过修改服务器上的web.config达到远程调试的效果…

复习者-Java EE 7概览

随着红帽JBoss企业应用平台7&#xff08;EAP 7&#xff09;的出现&#xff0c;甚至最近刚刚通过Java EE 7认证的WebLogic服务器&#xff0c;我认为现在应该为您重新介绍Java Enterprise Edition 7的时候了功能&#xff0c;并指向更多资源。 Java EE 7 –开发人员的生产力&…

按窗口文件php代码,在Windows命令行窗口中输入并运行PHP代码片段(不需要php文件)的方法...

有时候只是简单的为了测试某个php函数的效果&#xff0c;以前总是需要建一个php文件&#xff0c;复制这个文件的路径&#xff0c;再通过web访问或者用php命令执行这个php文件。一直想要怎么才能不用创建文件&#xff0c;才能直接执行PHP代码片段呢&#xff1f;终于找到了方法&a…

adf435编程_动态ADF列车:以编程方式添加列车停靠点

adf435编程我将展示如何以编程方式“即时”将火车停靠站添加到ADF火车中。 在我的用例中&#xff0c;我有一些票务预订应用程序。 它具有训练模型的有限任务流。 在火车的第一站&#xff0c;用户输入乘客数量&#xff0c;在随后的站点&#xff0c;他们输入一些乘客信息。 必须根…

JAVA消息服务JMS规范及原理详解

一、简介 JMS即Java消息服务&#xff08;Java Message Service&#xff09;应用程序接口&#xff0c;是一个Java平台中关于面向消息中间件&#xff08;MOM&#xff09;的API&#xff0c;用于在两个应用程序之间&#xff0c;或分布式系统中发送消息&#xff0c;进行异步通信。Ja…

Fiddle用于移动端抓包

一、什么情况下可以用到 1、调查参考其他移动端网站的抓包&#xff0c;他们传输方式。如微信上京东的智能机器人的包、移动端的请求接口格式、如何实现的效果等。 2、调试本地移动端页面的测试页面效果是否有问题。如:页面的样式、js、结构等。 二、操作(http) a、安装猎豹免费…

php中得到复选框的数据的代码,表单复选框向PHP传输数据的代码

表单复选框向PHP传输数据的代码表单复选框就是checkbox1、checkbox的应用复制代码 代码如下:2、由于我传输的是在php循环中产生的数组&#xff0c;因此value也要设成变量&#xff1a;for($i0;$i<10;$i){?>">]" value"要传输的内容">]" v…

Kioptrix-2

环境搭建 这个靶场环境稍微有点麻烦&#xff0c;首次打开的时候&#xff0c;需要将靶机从VM中移除&#xff08;注意是 从VM里面移除&#xff09;&#xff0c;然后利用nodpad等工具打开vmx文件&#xff0c;然后两步&#xff1a; 所有以“ethernet0”开头的条目并保存更改。然后…

《中国文化要略》第八章 古代教育 第九章 科举制度

转载于:https://www.cnblogs.com/bgd140206319/p/6565654.html

Hamcrest Matchers教程

本文是我们名为“ 用Mockito进行测试 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入了解Mockito的魔力。 您将了解有关“模拟”&#xff0c;“间谍”和“部分模拟”的信息&#xff0c;以及它们相应的Stubbing行为。 您还将看到使用测试双打和对象匹配器进行验证的过…

win7下安装 python2 和python3

一直纠结于选择py2还是py3&#xff0c;不如在同一系统下安装两个版本就好了。 1、安装python2.7和python3.5 直接到官网https://www.python.org/下载&#xff0c;安装就可以了。 2.安装比较简单&#xff0c;点exe文件一直下一步就可以了&#xff08;注意&#xff1a;安装的时候…

谈谈你对oracle的认识,对Oracle存储过程的几点认识

1、写Oracle存储过程时最好不要在其中写Commit语句。一般调用程序会自动Commit数据&#xff0c;比如用NHibernate调用的时候&#xff0c;NHibernate就会自动Commi1、写Oracle存储过程时最好不要在其中写Commit语句。一般调用程序会自动Commit数据&#xff0c;&#xff0c;比如用…

jmeter负载测试测试_Apache JMeter:随心所欲进行负载测试

jmeter负载测试测试这是有关使用Apache JMeter进行负载测试的第二篇文章&#xff0c;请在此处阅读第一篇文章&#xff1a; 有关对关系数据库进行负载测试的分步教程。 JMeter有很多采样器 。 如果您需要JMeter不提供的采样器&#xff0c;则可以编写您的自定义采样器。 &#xf…

VM虚拟机ping不通局域网其他主机的解决办法

1 我的笔记本的无线网卡是自动获取IP&#xff0c;并且是通过无线网卡上网。 2 我的有线网卡是通过自己设定IP跟局域网的其他机器连通。当前设定的IP为172.16.17.2 3我需要连接的局域网另一个主机为172.16.17.8&#xff0c;现在测试主机跟这个局域网的另一台主机是可以ping通的。…

linux命令画圣诞树图片,以 Linux 的方式庆祝圣诞节

原标题&#xff1a;以 Linux 的方式庆祝圣诞节当前正是假日季&#xff0c;很多人可能已经在庆祝圣诞节了。祝你圣诞快乐&#xff0c;新年快乐。为了延续节日氛围&#xff0c;我将向你展示一些非常棒的圣诞主题的 Linux 壁纸。在呈现这些壁纸之前&#xff0c;先来看一棵 Linux 终…

LINQ 学习路程 -- 查询语法 LINQ Query Syntax

1.查询语法 Query Syntax: from <range variable> in <IEnumerable<T> or IQueryable<T> Collection><Standard Query Operators> <lambda expression><select or groupBy operator> <result formation> // string collectio…

linux 权限提示信息,命令行快速提示:权限进阶 | Linux 中国

原标题&#xff1a;命令行快速提示&#xff1a;权限进阶 | Linux 中国本部分介绍使用权限管理文件访问和共享的其他方法。-- Paul W. Frields前一篇文章。本部分介绍使用权限管理文件访问和共享的其他方法。它建立在前一篇文章中的知识和示例的基础上&#xff0c;所以如果你还没…