温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JVM内存优化怎么做

发布时间:2021-06-22 17:46:49 来源:亿速云 阅读:137 作者:chen 栏目:大数据

本篇内容主要讲解“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内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

JVM内存优化怎么做

到此,相信大家对“JVM内存优化怎么做”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI