java堆内存参数调整

1.java堆内存参数

  我们为什么需要进行jvm堆内存调整?

         因为jvm垃圾回收机制,主要发生在堆内存区域,从堆的内存结构划分,里面存在伸缩区概念,那么频发的伸缩会影响jvm性能,所以我们需要去掉伸缩区。只需要-Xms和-Xmx大小相等,即堆内存里面-Xms和-Xmx是比较重要的参数。我们也可以将垃圾回收的日志打印出来。这时需要-XX:+PrintGCDetails参数。

     这里写图片描述

这里有两种方配置参数:命令行(自己百度,这里不介绍),工具(eclipse,ideal),这里讲ideal的配置

第一步:找到Edit Configurations

java堆内存参数调整_第1张图片

 

第二步:在 vm options 写上对应的参数

java堆内存参数调整_第2张图片

 我们如何监控java程序?

 

开发者:可以在配置参数,打印出日志,对日志进行分析。(下面讲对日志如何分析)

运维人员:可以使用jmap和jvisualvm.exe来查看日志

接下来看一下如何让jvm报出OutOfMemory异常来分析日志?

程序如下:

public static void main(String[] args){
    List list = new ArrayList<>();
     long i = 0;
    String string = "aaaaaaa";
    while (true) {
        string = (i++) + "";
        string.intern();
        list.add(string.intern());
    }
}

日志信息:

java堆内存参数调整_第3张图片

 

 分析:

[GC (触发MinorGC)[PSYoungGen(年轻代复制算法): 2560K(垃圾回收前年轻代内存)->508K(垃圾回收后年轻代内存)(3072K(总内存))] 2560K(堆内存回收前大小)->1062K(堆内存回收后大小)(10240K(堆总内存)), 0.0020058 secs] [Times: user=0.00(GC用户耗时) sys=0.00(GC系统耗时), real=0.00 secs(GC实际耗时)

通过可以上面参数可以计算出往老年代移动的多少对象:(2560-1062)-(2560-508)

 

 

 

 

 

你可能感兴趣的:(java虚拟机)