JVM 内存分析—优化

2023-11-17

参考链接:https://www.jianshu.com/p/c6e2abb9f657

JVM及GC:https://blog.csdn.net/sltylzx/article/details/90704205

 

在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)和老年代(不包含永久区)的比值
	4 表示 新生代:老年代=1:4,即年轻代占堆的1/5
	
	-XX:SurvivorRatio
	设置两个Survivor区和eden的比
	8表示 两个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());
		}
	}

}

 

转载于:https://my.oschina.net/u/3677987/blog/3101800

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JVM 内存分析—优化 的相关文章

  • Spring Security:如何在 FilterRegistrationBean 中使用多个 URL 模式?

    我有一颗豆子 Bean public FilterRegistrationBean animalsFilterRegistration FilterRegistrationBean registration new FilterRegist
  • android-透明RelativeLayout

    我想要制作一个具有可绘制渐变作为背景的活动 并将在其背景顶部显示 4 个面板 相对布局 现在我想让 4 个面板透明 例如 50 以便也可以看到渐变背景 我搜索了谷歌 但我发现只能通过活动而不是布局来做到这一点 如何做我想做的事 您可以创建一
  • 使 TreeMap 比较器容忍 null

    这个定制的 Valuecomarator 按其值对 TreeMap 进行排序 但在搜索 TreeMap 是否具有某个键时 它不能容忍 nullpointException 如何修改比较器来处理零点 import java io IOExce
  • Eclipse 说“更新 Android Developer Toolkit”

    我不知何故弄乱了我的 Eclipse 和 Android 设置 我不知道如何修复它 问题症状如下 在 首选项 gt Android 中 我尝试选择 android sdk linux 的位置 选择时出现错误 此 Android SDK 需要
  • 使用Optional作为类中的属性是一个好习惯吗? [复制]

    这个问题在这里已经有答案了 我读过一些关于目的的内容Optional 不幸的是我不记得在哪里 在Java 8中 我很惊讶作者没有提到使用Optional作为类中的属性 由于我在课堂上经常使用选项 我想知道这是否是一个好的做法 或者我可以更好
  • Android 背景 + 文本 + 按钮图标

    我想要一个图像设置为文本的背景 并在文本的左侧设置一个图标 在iPhone中非常简单 但不知道如何在Android上做到这一点 调整按钮的大小并保持图标 文本的位置和距离正确 iPhone 安卓我有这个 xml代码是
  • Hibernate HQL 查询:如何将集合设置为查询的命名参数?

    给定以下 HQL 查询 FROM Foo WHERE Id id AND Bar IN barList I set id使用查询对象的setInteger 方法 我想设置 barList用一个List对象 但查看 Hibernate 文档和
  • Maven:如何获取捆绑在包中的 .so 库

    我有一个带有 jar 和 so 文件的第三方库 我配置了 pom xml 如下
  • 如何告诉 Java SAX 解析器忽略无效字符引用?

    当尝试使用字符引用解析不正确的 XML 时 例如 x1 Java 的 SAX 解析器因致命错误而惨死 例如 org xml sax SAXParseException Character reference x1 is an invalid
  • Hibernate3:自引用对象

    需要一些帮助来了解如何执行此操作 我将在文件系统上运行递归 查找 并且希望将信息保留在单个数据库表中 具有自引用的层次结构 这是我想要填充的数据库表结构 目录对象表 id int NOT NULL name varchar 255 NOT
  • Spark toLocalIterator 和迭代器方法之间的区别

    在编写 Spark 程序时我遇到了这个toLocalIterator 方法 之前我只使用iterator method 如果有人曾经使用过这种方法 请点亮 我在使用时遇到foreach and foreachPartitionSpark程序
  • Spring Data elasticsearch @Query 注解嵌套对象

    我有两节课 Document public class PracticeQuestion private int userId private List
  • Java 通用问题

    下面的代码可以编译 但如果我取消注释行 它不会编译 我很困惑为什么 HashMap 确实扩展了 AbstractMap 并且声明映射的第一行可以正常编译 import java util AbstractMap import java ut
  • Java可以进行进程监控吗?

    是否可以用Java编写一个在托盘中运行的应用程序 并且当启动某个应用程序时 它可以检测到它 我想对某些程序执行此操作 以了解我每周使用它们多长时间 我是 Java 新手 所以我不知道 Java 是否是最适合此操作的语言 或者它是否具有对操作
  • Jersey bean 验证 ParameterNameProvider

    我正在阅读关于泽西岛的文档Bean验证 https jersey java net documentation latest bean validation html The ParameterNameProvider示例显示如何定义方法的
  • 我可以从同一个 jar 文件执行两个不同的类吗?

    我有一个项目 在一个包中我制作了服务器 在第二个包中我制作了客户端 它运行良好 我想创建一个 Jar 文件 是否可以使用同一个 jar 文件分别运行客户端和服务器 我使用了只有一个 main 的 jar 文件 当我运行 jar 文件时 它会
  • bean 中的 Spring JavaConfig 属性未设置?

    我正在考虑将 Spring JavaConfig 与一些属性文件一起使用 但 bean 中的属性未设置 bean 中的属性未设置 这是我的网络配置 Configuration EnableWebMvc PropertySource valu
  • LinkedBlockingQueue 抛出 InterruptedException

    我有这段代码 ALinkedBlockingQueue应该只抛出一个Exception如果在等待添加到队列时被中断 但这个队列是无限的 所以它应该尽快添加 为什么我的关闭方法会抛出一个InterruptedException private
  • Selenium Webdriver 中的 IF 语句

    我想知道是否有人可以帮助我解决我正在尝试解决的问题以及 Java 中 Webdriver 的 If 语句 当登录到我正在测试的应用程序时 可以在主页之前进入安全问题页面 如果是新用户等 我希望测试中的代码做的是 如果出现安全问题页面 请填写
  • 在私有 guice 模块中公开 Map

    我在 guice 中有一个 PrivateModule 我想从该模块公开一个 Map public class TestInjectionModule extends PrivateModule expose Map class annoa

随机推荐

  • 算法——B树,B-树,B+树,B*树全面解析笔记

    算法 B树 B 树 B 树 B 树全面解析笔记 https www cnblogs com lianzhilei p 11250589 html http blog codinglabs org articles theory of mys
  • 【QT】混合UI设计

    虽然利用Designer和代码的设计方式都可以开发GUI 但是毫无疑问的是最有效的开发方式是利用两者进行混合开发 下面这个实验例子来自 QT5 9 C 开发指南 我做了小部分修改 最终效果是这样 图标导入 这次我们要开发的是一个有工具栏 菜
  • 哈希表——哈希表的概念,哈希表的实现(闭散列,开散列)详细解析

    作者 努力学习的少年 个人简介 双非大二 一个正在自学c 和linux操作系统 写博客是总结知识 方便复习 目标 进大厂 如果你觉得文章可以的话 麻烦你给我点个赞和关注 感谢你的关注 种一颗树最好是10年前 其次是现在 目录 哈希概念 哈希
  • 实战怎么用u盘重装系统

    当电脑系统出现故障问题无法进系统的情况下 我们可以通过制作u盘启动盘进pe系统进行修复或者重装系统解决 不过很多网友不知道怎么用u盘重装系统 今天小编就给大家分享一个简单易操作的u盘重装系统教程 具体的步骤如下 1 先在一台可用的电脑上下载
  • nodejs服务后台持续运行三种方法

    网上看到的 用了第二种方式OK的 自己备份保存下 一 利用 forever forever是一个nodejs守护进程 完全由命令行操控 forever会监控nodejs服务 并在服务挂掉后进行重启 1 安装 forever npm inst
  • 微信小程序之内嵌网页(webview)

    微信小程序提供了新的开放能力 它终于开放了在小程序中内嵌HTML页面的功能 从微信小程序基础库1 6 4开始 我们就可以在小程序内放置一个
  • 蓝桥杯大赛— —每日一题(6、走方格)

    走方格 题目描述 在平面上有一些二维的点阵 这些点的编号就像二维数组的编号一样 从上到下依次为第 1 至第 n 行 从左到右依次为第 1 至第 m 列 每一个点可以用行号和列号来表示 现在有个人站在第 1 行第 1 列 要走到第 n 行第
  • Redis可以代替MySQL作为数据库吗

    Redis可以代替MySQL作为数据库吗 当使用Redis作为数据库时 以下是一些基本的代码示例 1 连接到Redis服务器 2 存储和获取数据 3 列表操作 4 有序集合操作 6 键过期和删除 Redis作为数据库时 下面是一些更复杂的代
  • 如何基于G6进行双树流转绘制?

    1 背景 业务背景 CRM系统随着各业务条线对线索精细化分配的诉求逐渐增加 各个条线的流向规则会越来越复杂 各个条线甚至整个CRM的线索流转规则急需一种树形的可视化的图来表达 技术背景 在开发之前考虑了三种方案 原生canvas fabri
  • STM32 同个定时器 采用2个通道输入捕获

    工作中遇到 做点总结 之前看CSDN 找到一种写法 就是 把中断中的 CAPTURE VAL 的值 变成 date1 date2 去保存 但是我的写法不成功 一位大佬帮忙改成功了 总结我的写法错误之处 主函数区别 我把date1 清0 放后
  • java longlong_java Long long

    在Java中执行如下的代码 long number 26012402244 编译的时候会出现一个错误 提示 过大的整数 32322355744 如果在Eclipse中书写上面的代码 提示的是 The literal 26012402244
  • DrawerLayout与FragmentTabHost结合模仿oschina主界面

    1 DrawerLayout实现侧滑菜单 drawerlayout是官方出的侧滑菜单控件 使用起来非常方便 将它当作LinearLayout一样的布局控件 完成布局xml文件
  • 安全(六种核心安全机制-加密、密钥、签名与证书)

    安全要解决什么问题 你都会的密码术 安全机制之对称加密 安全机制之非对称加密 安全机制之密钥交换 安全机制之消息摘要 安全机制之电子签名 安全机制之证书与PKI 一 在典型的场景中 安全主要用于解决4类需求 1 保密 Security Co
  • Load balancer does not have available server for client问题

    Load balancer does not have available server for client问题 是因为消费端没有调用成功服务端 下面四步是必备的 可以检查一番 1 写nacos发现的启动类注解 SpringBootApp
  • statsmodels 笔记:seasonal_decompose 时间序列分解

    1 使用方法 statsmodels tsa seasonal seasonal decompose x model additive filt None period None two sided True extrapolate tre
  • [Nowcoder / POJ2728] 最优比率生成树

    Nowcoder链接 POJ链接 题目描述 David the Great has just become the king of a desert country To win the respect of his people he d
  • 单例模式的6种实现方式

    单例模式的6种实现方式 一 单例模式的定义 定义 确保一个类只有一个实例 并提供该实例的全局访问点 这样做的好处是 有些实例 全局只需要一个就够了 适用单例模式就可以避免一个全局适用的类 频繁的创建和销毁 耗费系统资源 二 单例模式的设计要
  • C++函数指针应用例子

    C 函数指针应用例子 前段时间在写代码的时候 想让程序根据一个函数运行出的结果 从四个函数中自动选择一个函数运行 这四个函数我们就取名叫 value 0 value 1 value 2 value 3 假设value 0是这样的 int v
  • 基于Android系统英语学习助手APP设计开发

    一 设计思路 1 1设计目标 1 2设计思路 1 3设计内容 1 3 1界面设计 1 3 2功能模块设计 1 3 3功能流程图 1 3 4数据库设计 如果没有数据库这部分删除 1 4工具设备要求 1 5技术方案 二 设计过程与说明 2 1技
  • JVM 内存分析—优化

    参考链接 https www jianshu com p c6e2abb9f657 JVM及GC https blog csdn net sltylzx article details 90704205 在Eclipse上安装MAT Mem