您的位置:首页 > 其它

Jvm参数调优初探索(一)

2017-05-08 20:11 225 查看
之前学习Jvm相关的理论知识,偶尔可能在程序出现内存溢出时候会放下手中工作调一下参数,解决问题。但是没有系统实践过,最近相对比较稍微轻松一点,尝试实践一些Jvm参数的使用,并记录一下笔记!

本次程序尝试使用的jvm参数有:

-XX:+PrintCommandLineFlags   打印jvm的参数的参数

例如:写一个HelloWorld程序,将VM参数设置为:-XX:+PrintCommandLineFlags ,将会输出如下信息:

-XX:InitialHeapSize=64718336 -XX:MaxHeapSize=1035493376 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC 

通过输出信息我们可以看出程序的JVM参数为:初始堆大小为=64718336 ,最大堆大小为:1035493376等信息!

-XX:+PrintGCDetails参数是程序运行时候打印JVM运行的垃圾回收信息

设置最大堆最小堆大小 -Xmx1000m -Xms1000m 

 -XX:NewRatio=4 老年代和新生代的堆内存分配,例如此时如果堆=1000MB的话,那么此时老年代大小就是800MB,新生代大小是200MB(Eden+S0+S1一共200MB)

 -XX:SurvivorRatio=3 设置eden/s0=eden/s1,在本程序中由于SurvivorRatio=3 所以eden/s0=eden/s1=3,因此如果新生代有200MB的大小的话,则Eden=120MB,s0=s1=40,所以一共为120+40+40=200

例如程序:

package com.daxin;

/**
*
* @author daxin
*
* @email leodaxin@163com
*
* @date 2017年5月8日 下午8:06:13
*
*/
public class VM {
public static void main(String[] args) {

System.out.println("Hello World ...");

}

}

我们可以使用jdk附带的工具jvisualvm来查看堆栈信息:



新生代和老年代的堆栈信息分配和我们陈述的正好吻合!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: