Jvm参数调优初探索(一)

来源:互联网 发布:电视连接网络怎么设置 编辑:程序博客网 时间:2024/05/18 03:14

之前学习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来查看堆栈信息:



新生代和老年代的堆栈信息分配和我们陈述的正好吻合!


0 0