JVM系列(4):堆参数调优

简介: jvm调优就是根据gc日志分析jvm内存分配、回收的情况来调整各区域内存比例或者gc回收的策略;更深一层就是根据dump出来的内存结构和线程栈来分析代码中不合理的地方给予改进。

介绍


jvm调优就是根据gc日志分析jvm内存分配、回收的情况来调整各区域内存比例或者gc回收的策略;更深一层就是根据dump出来的内存结构和线程栈来分析代码中不合理的地方给予改进。

 

堆内存的分布

  java7


 

 

  Java8


 

  Java8以后将永久区更换为元空间,其他都是一样的


  参数详解:


    -Xms:初始内存大小


    -Xmx:最大内存大小

 

调优


  参数:-Xms:设置初始分配大小,默认为物理内存的1/64


     -Xmx:最大分配内存,默认为物理内存的1/4


     -XX:+PrintGCDetails:输出详细的GC处理日志


  代码详解:


public static void main(String[] args){
  long maxMemory = Runtime.getRuntime().maxMemory() ;//返回 Java 虚拟机试图使用的最大内存量,最大值
  long totalMemory = Runtime.getRuntime().totalMemory() ;//返回 Java 虚拟机中的内存总量,初始值
  System.out.println("MAX_MEMORY = " + maxMemory + "(字节)、" + (maxMemory / (double)1024 / 1024) + "MB");
  System.out.println("TOTAL_MEMORY = " + totalMemory + (" 字节)、 " + (totalMemory / (double)1024 / 1024) + "MB");
}

调整内存大小


默认的情况下分配的内存是总内存的“1 / 4”、而初始化的内存为“1 / 64”


参数调整:-Xms1024m -Xmx1024m -XX:+PrintGCDetails(将最大内存和初始内存调为一样,1G)



 

运行结果:



  分配的内存=新生区+老年区(堆物理上分为两个区域,新生区和老年区)



 

 

 

   制造OOM


   将最大内存和最小内存调为10m

 


 

 

  不停的new 对象,让其撑破Heap最大内存



  GC日志分析


    YoungGC:

 


  Full GC


目录
相关文章
|
16小时前
|
Java 开发工具
JVM参数太多?一网打尽常用JVM参数!
JVM参数太多?一网打尽常用JVM参数!
|
16小时前
|
监控 负载均衡 算法
JVM工作原理与实战(三十二):GC调优
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了GC调优、GC调优的核心指标等内容。
13 0
|
16小时前
|
存储 Arthas 监控
JVM工作原理与实战(三十):堆内存状况的对比分析
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了堆内存状况的对比分析、产生内存溢出的原因等内容。
13 0
|
16小时前
|
存储 监控 算法
JVM工作原理与实战(二十七):堆的垃圾回收-G1垃圾回收器
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了G1垃圾回收器、G1垃圾回收器的回收方式、G1垃圾回收器执行流程、垃圾回收器的选择等内容。
11 0
|
16小时前
|
机器学习/深度学习 监控 算法
JVM工作原理与实战(二十六):堆的垃圾回收-垃圾回收器
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了垃圾回收器、Serial垃圾回收器、SerialOld垃圾回收器、ParNew垃圾回收器、CMS垃圾回收器、Parallel Scavenge垃圾回收器、Parallel Old垃圾回收器等内容。
13 0
|
16小时前
|
Arthas 监控 算法
JVM工作原理与实战(二十五):堆的垃圾回收-垃圾回收算法
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了垃圾回收算法评价标准、标记清除算法、复制算法、标记整理算法、分代垃圾回收算法等内容。
20 0
JVM工作原理与实战(二十五):堆的垃圾回收-垃圾回收算法
|
16小时前
|
存储 缓存 监控
JVM工作原理与实战(二十四):堆的垃圾回收-对象引用
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了强引用、软引用、弱引用、虚引用、终结器引用等内容。
12 0
|
16小时前
|
监控 算法 安全
JVM工作原理与实战(二十三):堆的垃圾回收-引用计数法和可达性分析法
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了判断堆上的对象是否可以回收的方法(引用计数法、可达性分析法)、查看垃圾回收日志等内容。
13 0
|
16小时前
|
存储 Arthas 监控
JVM工作原理与实战(十八):运行时数据区-堆
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了运行时数据区、堆介绍、堆的关键参数等内容。
12 0
|
16小时前
|
Java
jvm配置参数,查看大对象直接分配到老年代
jvm配置参数,查看大对象直接分配到老年代