千家信息网

JVM内存优化怎么做

发表于:2024-11-15 作者:千家信息网编辑
千家信息网最后更新 2024年11月15日,本篇内容主要讲解"JVM内存优化怎么做",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"JVM内存优化怎么做"吧!在Eclipse上安装MAT(MemoryA
千家信息网最后更新 2024年11月15日JVM内存优化怎么做

本篇内容主要讲解"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 list = new ArrayList();                int i = 0;                while(true) {                        //public native String intern();                        list.add(String.valueOf(i++).intern());                }        }}

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

0