JVM调优主要是针对内存管理方面的调优,包括控制各个代的大小,GC策略。由于GC开始垃圾回收时会挂起应用线程,严重影响了性能,调优的目是为了尽量降低GC所导致的应用线程暂停时间、 减少Full GC次数。

代大小调优

最关键参数:-Xms、 -Xmx 、-Xmn 、-XX:SurvivorRatio、-XX:MaxTenuringThreshold、-XX:PermSize、-XX:MaxPermSize

-Xms、 -Xmx 通常设置为相同的值,避免运行时要不断扩展JVM内存,这个值决定了JVM heap所能使用的最大内存。

-Xmn 决定了新生代空间的大小,新生代Eden、S0、S1三个区域的比率可以通过-XX:SurvivorRatio来控制(假如值为 4  表示:Eden:S0:S1 = 4:3:3 )

-XX:MaxTenuringThreshold 控制对象在经过多少次minor GC之后进入老年代,此参数只有在Serial 串行GC时有效。

-XX:PermSize、-XX:MaxPermSize 用来控制方法区的大小,通常设置为相同的值。

1.避免新生代大小设置过小

当新生代设置过小时,会产生两种比较明显的现象,一是minor GC次数频繁,二是可能导致 minor GC对象直接进入老年代。当老年代内存不足时,会触发Full GC。

2.避免新生代设置过大

新生代设置过大,会带来两个问题:一是老年大变小,可能导致Full  GC频繁执行;二是 minor GC 执行回收的时间大幅度增加。

3.避免Survivor区过大或过小

-XX:SurvivorRatio参数的值越大,就意味着Eden区域变大,minor GC次数会降低,但两块Survivor区域变小,如果超过Survivor区域内存大小的对象在minor GC后仍没被回收,则会直接进入老年代,

-XX:SurvivorRatio参数值设置过小,就意味着Eden区域变小,minor GC触发次数会增加,Survivor区域变大,意味着可以存储更多在minor GC后任存活的对象,避免其进入老年代。

4.合理设置对象在新生代存活的周期

新生代存活周期的值决定了新生代对象在经过多少次Minor GC后进入老年代。因此这个值要根据自己的应用来调优,Jvm参数上这个值对应的为-XX:MaxTenuringThreshold,默认值为15次。

GC调优

1.GC搭配

参见另一遍垃圾收集器

2.查看JVM参数

命令行工具   可视化工具

3.GC日志参数

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

-Xloggc:c:\Java\gc.log

本系列:

  • Java虚拟机学习(1):体系结构 内存模型
  • Java虚拟机学习(2):垃圾收集算法
  • Java虚拟机学习(3): 类加载机制
  • Java虚拟机学习(4):JDK可视化监控工具
  • Java虚拟机学习(5):内存调优
原文出处: java2000_wl
from: http://www.importnew.com/22240.html

Java虚拟机学习(5):内存调优相关推荐

  1. Java启动参数与内存调优一些学习笔记

    转载自  Java启动参数与内存调优一些学习笔记 .参数的含义 -Xms128m JVM初始分配的堆内存 -Xmx512m JVM最大允许分配的堆内存,按需分配 -XX:PermSize=64M JV ...

  2. Java虚拟机这一块 —— JVM 调优和深入了解性能优化

    JVM 调优和深入了解性能优化 JVM 调优的本质 GC 调优原则 调优的原则 目的 GC 调优 调优步骤 日志分析 阅读 GC 日志 -XX:+UseSerialGC -XX:+UseParNewG ...

  3. vilatile 深入理解java虚拟机_深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)...

    本套课程从虚拟机的发展历史,虚拟机的内存结构,对象的分配与回收以及字节码,类加载等多个方面深入地对Java虚拟机进行了剖析.内容详实,语言通俗易懂.理论结合实践,让学习本套视频的朋友可以更快的理解虚拟 ...

  4. 深入理解Java虚拟机:Jvm性能调优

    本篇内容包括:Jvm 性能调优简介:根据需求目标进行 Jvm 调优规划(即 调优的目标.调优的步骤):Jvm 调优参数.命令.工具:以及 Java 中的内存泄露问题的详解- 一.Jvm 性能调优简介 ...

  5. Java虚拟机性能监控与调优实战

    Java虚拟机的内存结构,区别于侧重于多线程的Java内存模型(Java Memory Model) 但在此之前,我们该思考一下:JVM的内存结构为什么要这样划分? 我认为主要是依据于不同数据的更新频 ...

  6. Java虚拟机学习 - 体系结构 内存模型(转载)

    一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代" ."非堆",  它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内 ...

  7. Java虚拟机学习 - 体系结构 内存模型

    一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代" ."非堆", 它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内存 ...

  8. java虚拟机学习-JVM调优总结-新一代的垃圾回收算法(11)

    java虚拟机学习-深入理解JVM(1) java虚拟机学习-慢慢琢磨JVM(2) java虚拟机学习-慢慢琢磨JVM(2-1)ClassLoader的工作机制 java虚拟机学习-JVM内存管理:深 ...

  9. Java虚拟机学习(7):对象内存分配与回收

    对象优先在Eden上分配 大多数情况下,对象优先在新生代Eden区域中分配.当Eden内存区域没有足够的空间进行分配时,虚拟机将触发一次 Minor GC(新生代GC).Minor GC期间虚拟机将E ...

最新文章

  1. 基于颜色特征,形状特征和纹理特征的数字图像的检索(Digital Image Retrieval)MATLAB GUI实现(本科毕业设计)
  2. 服务器自动post,jquery ajax $.post自动变GET的解决方式(for CI)
  3. 邬贺铨:解读5G技术关键点,及如何影响AIoT
  4. Cesium学习笔记(九):导入3D模型(obj转gltf)
  5. Blazor 数据绑定开发指南
  6. 企业之经典《HSRP热备份路由协议高级配置》技术
  7. qtreeview 点击二级节点弹出dialog_2019二级造价师开卷考?一顿操作猛如虎,一看分数59...
  8. [unity3d]插件2d toolskit
  9. 【IDEA】项目集成svn
  10. 使用segue进行页面跳转
  11. 15个免费好用的抓包工具
  12. em表示什么长度单位_CSS的长度单位(em)与em标签
  13. VB SendMessage 函数
  14. 我的win10平板维修,重刷系统的经验,windows pe5.0拯救我的平板
  15. c语言程序画正八边形,用少儿编程绘制一个正九边形
  16. 7-4 愿天下有情人都是失散多年的兄妹 (25 分)
  17. 检查xml格式是否正确
  18. 6款程序员必备的免费在线画图工具,贼好用!
  19. 论文的系统 排版软件Latex
  20. Blob的所有Type类型

热门文章

  1. 深入redis内部---网络编程
  2. jquery学习手记(7)Data_utility_index方法
  3. JS中map()与forEach()的用法
  4. Fabric 链码Chaincode 的安装、初始化、调用、升级
  5. 相比 App,Web 开发竟更适合初创公司?
  6. 神经网络反向传播的数学原理
  7. 小县城也被互联网+撞了一下腰
  8. 关于计算机网络的好坏处的英语作文,网购的好处和坏处英语作文带翻译
  9. Shell-通过shell启动Java类中的main方法 + 通过Shell启动jar包
  10. Java学习笔记(六)--字符串String类