1 Trace跟踪参数
a) -verbose:gc
b) -XX:+printGC
-XX:+printGCDetails ---打印GC详细信息
-XX:+printGCTimeStamps ---打印GC发生的详细时间
以-XX:+printGCDetails 为例:
public class test2 { public static void main(String[] args) { long begin = System.currentTimeMillis(); for(int i=0; i<100000000; i++){ alloc(); } long end = System.currentTimeMillis(); System.out.println(end - begin); } public static void alloc(){ byte[] b = new byte[2]; b[0] = 1; } } 参数: -XX:-DoEscapeAnalysis -XX:+PrintGCDetails 运行结果部分摘抄: [GC [PSYoungGen: 3264K->0K(3328K)] 3420K->156K(10176K), 0.0067019 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] GC回收,从原来3420K回收后变成156K(目前堆内存空间为10176K) 耗时0.0067019 secs [GC [PSYoungGen: 3264K->0K(3328K)] 3420K->156K(10176K), 0.0002648 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 1534 Heap PSYoungGen total 3328K, used 196K [0x08e20000, 0x09170000, 0x09170000) eden space 3264K, 6% used [0x08e20000,0x08e51000,0x09150000) from space 64K, 0% used [0x09150000,0x09150000,0x09160000) to space 64K, 0% used [0x09160000,0x09160000,0x09170000) PSOldGen total 6848K, used 156K [0x08770000, 0x08e20000, 0x08e20000) object space 6848K, 2% used [0x08770000,0x08797060,0x08e20000) PSPermGen total 16384K, used 2146K [0x04770000, 0x05770000, 0x08770000) object space 16384K, 13% used [0x04770000,0x049889d0,0x05770000) 堆内存,总共328K, 已使用 196K,0x08e20000表示此堆内存分配其实空间,0x09170000表示当前所分配的位置 0x09170000表示最高能申请到的位置 那么实际占用内存为 ( 0x09170000 - 0x08e20000)/1024/1024 M 空间
c) 可以打印GC的简要信息
指定GC log的位置,以文件名 gc.log 输出。
-Xloggc:log/gc.log
d) -XX:+TraceClassLoading 监控类的加载
还是以上例为例,在运行时增加参数 -XX:+TraceClassLoading
运行结果摘抄部分如下:
[Opened C:\Program Files\Java\jdk1.6.0_32\jre\lib\rt.jar] [Loaded java.lang.Object from C:\Program Files\Java\jdk1.6.0_32\jre\lib\rt.jar] [Loaded java.io.Serializable from C:\Program Files\Java\jdk1.6.0_32\jre\lib\rt.jar] [Loaded java.lang.Comparable from C:\Program Files\Java\jdk1.6.0_32\jre\lib\rt.jar] [Loaded java.lang.CharSequence from C:\Program Files\Java\jdk1.6.0_32\jre\lib\rt.jar] [Loaded java.lang.String from C:\Program Files\Java\jdk1.6.0_32\jre\lib\rt.jar] .......
2 堆的分配参数
-Xmx 指定最大堆
-Xms 指定最小堆
-Xmn 设置新生代大小
-XX:NewRatio 新生代和老生代的比值,eg: 4 表示新生代:老生代 = 1:4 新生代占内存的1/5
-XX:SurvivorRatio
-XX:OnOutOfMemoryError
在内存溢出时 执行一个脚本
-XX:OnOutOfMemoryError=脚本位置,比如发送邮件 或者重启程序
在内存溢出时,将错误信息保存到硬盘文件中:
-Xmx20m -Xms5m 指定运行程序最大使用20M内存,最小使用5M内存。 程序运行使用参数: -Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump public static void main(String[] args) { List list = new ArrayList(); for(int i=0;i<25; i++) { list.add(new byte[1*1024*1024]); } }
相关推荐
├─补充1:拔高课程(Redis3.0持久化、集群、MySQL5.6优化、Tomcat7优化) │ │ 打开必读.txt │ │ │ ├─课前资料 │ │ ├─MySQL5.6优化 │ │ │ MySql5.6性能优化.docx │ │ │ │ │ ├─Redis集群 │ ...
- **工作原理**: 通过Agent收集JVM数据,然后将这些数据发送至Viewer,最后通过浏览器进行访问。 - **系统资源开销** (官方数据): - 小于2%的CPU占用率 - 10MB内存占用 - 用户请求延迟小于5毫秒 #### 二、...
1. **Lambda表达式**:Java 8引入了函数式编程的关键元素——lambda表达式,它允许将代码块作为方法参数或返回值,简化了对集合的操作,尤其是通过Stream API进行数据处理。 2. **函数式接口**:为支持lambda表达式...
4) 修改静态编译后“读配置项”命令在第三个参数“配置项名称”为空文本时导致程序崩溃的BUG 5) 修改高级选择夹中的组件在窗口载入后强制得到焦点的BUG 6) 修改MYSQL支持库跨静态编译的EXE和DLL传递连接句柄和...
- **Broker配置参数**: - 包括存储路径、消息存活时间、日志级别等配置项。 - **Broker集群搭建**: - 描述了如何搭建一个包含多个Broker节点的集群环境。 - **Broker重启对客户端的影响**: - 讨论了Broker重启时...
它可以将一个字符串按照指定的分隔符拆分成多个部分,这对于解析配置文件或处理命令行参数等场景非常有用。 #### 8. 重命名String类 有时候,为了避免名称冲突或适应项目的命名规范,可能需要对String类进行重命名...