目录

案例分析

大内存硬件上的程序部署策略

堆外内存导致的溢出错误

外部命令导致系统缓慢

由Windows虚拟内存导致的长时间停顿

由安全点导致长时间停顿

编译时间和类加载时间优化

类加载时间优化

编译时间

调整内存设置控制垃圾收集频率


案例分析

大内存硬件上的程序部署策略

  1. 通过单独的Java虚拟机实例来管理大量的Java堆
  2. 使用多个Java虚拟机,建立逻辑集群来李永硬件资源

堆外内存导致的溢出错误

-XX:MaxDirectMemorySize 默认和对大小一样,但是会受到物理内存大小的限制。 JDK1.4 新增的NIO,分配内存是在对堆内存,使用Channel和Buffer在Java堆内分配的对象来操作堆外的内存,减少直接内存到Java堆内存的拷贝过程。

在32位的Windows下应用最多可以占用2GB的内存大小,当Java堆设置的过大,导致直接内存分配不到时就会发生OOM,并且直接内存的溢出并不会产生堆转储文件,即使设置了-XX:+HeapDumpOutOfMemoryError

外部命令导致系统缓慢

通过Java的**Runtime.getRumtime().exec()**来调用外部的脚本,例如shell或者py脚本。这个命令首先会复制一个和当前一样的环境变量进程,在用这个新的进程取执行外部的命令,最后再退出这个进程。

这种方式,使用top命令无法发觉是Java应用进程在消耗cpu,而是由新创建的进程在消耗,当量较大时,创建大量的进程,导致系统缓慢。

由Windows虚拟内存导致的长时间停顿

对于Java的GUI程序中要避免程序在最小化的时候,Windows系统将程序放到虚拟内存,导致不能立即响应 使用参数可以立马解决: -Dsun.awt.keepWorkingSetOnMinimize=true

由安全点导致长时间停顿

使用G1收集器,并且-XX:MaxGCPuaseMillis设置为500(默认200),但依然发生长达3s以上的停顿,对于线程没有进入安全点,导致收集垃圾时,等待各线程进入安全点,导致的长时间停顿。 通过参数 -XX:SafepointTimeout -XX:SafepointTimeoutDelay=2000 让虚拟机在等到线程进入安全点的时间超时2000ms就认定为超时,输出导致问题的线程名称。 在方法调用,循环跳转,异常跳转会设置安全点,但是HotSpot对循环做了优化,int类型或更小的数据类型,默认不会被放置安全点,称为可数循环,使用long或者更大的数据类型,称为不可数循环,则会放置安全点。 在发生长时间没有进入安全点的线程,吧循环索引从int改为long,可解决问题。

编译时间和类加载时间优化

类加载时间优化

JDK1.6中新加入类型检查验证器,在加载类的时候进行字节码验证,通过参数关闭可以作为一项优化措施。 -Xverify:none 可以提高程序的启动时间

编译时间

编译时间是指虚拟机的即使编译器编译热点代码(Hot Spot Code)的耗时。 如果一段Java方法被调用次数到达一定程度,就会被判定为热点代码,交给即时编译器编译为本地代码,提高运行速度(这也是HotSpot名字的由来)。

Java编译器将源码编译为字节码,并通过虚拟机解释方式执行字节码,比起C/C++编译成本地二进制代码来说,程序执行虚度要慢不少。但是只要Java程序没有问题,随着运行时间的增长,代码被编译的越来越彻底,运行速度应当是越来越快的。完全有可能在运行期动态编译比C/C++的编译器静态编译出来的结果要更加优秀,因为运行期的编译器可以收集很多静态编译器无法的信息。

在一个Java程序启动过程中,也可能会存在一个热点方法被编译为本地方法的过程,这个编译过程会占用一定的时间,但是后续使用这个方法,就可以获得像调用本地方法一样的执行效率。如果想通过参数禁用编译器运作,来提高程序的启动时间,那么后续如果大量使用这个方法不能得到像本地方法的执行效率。 -Xint

调整内存设置控制垃圾收集频率

如题,通过设置堆大小来控制垃圾收集频率(通过jstat -gc等命令查看Java程序GC次数),使用参数禁止显示的触发垃圾收集。

主要目的就是为了减少Full GC。减少程序停顿时间。

-XX:+DiableExplicitGC


参考:《深入理解Java虚拟机》 第3版 周志明

第5章 调优案例分析与实战相关推荐

  1. 《深入理解Java虚拟机》第5章 调优案例分析与实战

    5.2.1高性能硬件上的程序部署策略 监控服务器运行状况发现网站没有响应是由GC停顿导致的,虚拟机运行在Server模式,默认使用吞吐量优先收集器,回收12GB的堆,一次Full GC的停顿时间高达1 ...

  2. Java之JVM调优案例分析与实战(1) - 高性能硬件上的程序部署策略

    本JVM系列均来源于<深入理解Java虚拟机>一书中,版权归该书作者所有. 环境:一个15万PV/天左右的在线文档类型网站最近更换了硬件系统,新系统硬件为4个CPU.16GB物理内存.OS ...

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

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

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

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

  5. 《深入理解JVM.2nd》笔记(五):调优案例分析与实战

    文章目录 概念 案例分析 高性能硬件上的程序部署策略 情景再现1 问题分析1 关于Full GC 使用64位JDK来管理大内存可能遇到问题 建立逻辑集群 使用逻辑集群可能遇到的问题 最后解决方案 集群 ...

  6. Java之JVM调优案例分析与实战(5) - 服务器JVM进程奔溃

    环境:一个基于B/S的MIS系统,硬件为2个CPU.8GB内存的HP系统,服务器是WebLogic9.2(就是第二个案例中的那个系统).正常运行一段时间后,最近发现在运行期间频繁出现集群节点的虚拟机进 ...

  7. 深入理解java虚拟机gc_jvm GC收集器与内存分配(深入理解java虚拟机第三章)

    jvm GC收集器与内存分配(深入理解java虚拟机第三章) 本篇是<深入理解java虚拟机第三章>的笔记记录. 一 为什么要关注GC和内存分配? 需要排查各种内存溢出.内存泄漏问题时,或 ...

  8. 深入理解Java虚拟机-第六章 类文件结构

    第六章 类文件结构 6.1 概述 略 6.2 无关性的基石 因为想要实现 "Write Once,Run Anywhere"的伟大理想,Java 虚拟机被发明了出来.这些虚拟机都可 ...

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

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

最新文章

  1. 为什么微博用jsoup爬取不出来东西_腾讯面试题: 百度搜索为什么那么快? | 原力计划...
  2. 时序约束,STA的QA
  3. Linux下文件描述符
  4. 大数据可视化软件//完美的SCI配图
  5. C语言试题五十八之请编写函数fun,:计算并输出下列多项式的值(sn=1+1/1!+1/2!+1/3!+1/4!+…+1/n! )
  6. 浅谈Time Elastic Band
  7. 《伤心秦汉》2、从胯下崛起的将军——大汉淮阴侯韩信
  8. 富士通Fujitsu DPK2181H Pro 打印机驱动
  9. php PDO连接mysql
  10. 路由器的介绍和基本原理
  11. 干货分享:今天谈谈大学生该如何运营校园微信公众号!
  12. 获取所有复选框选中状态的id
  13. Uaexpert操作手册
  14. 【设计模式】单例模式是什么?如何实现单例模式?单例模式常见问题?
  15. pycharm配置python2.7.6环境_pycharm如何配置python环境
  16. 蓝桥杯真题:三羊献瑞
  17. Spring 5 详细教程 IDEA版本 复习笔记 狂神笔记 面试宝典
  18. [微信小程序] 微信小程+ts中 箭头函数和this的问题
  19. 牛校网php,升学指导网
  20. 如何才能写出优秀作文?猿辅导:生活的观察与感受非常重要

热门文章

  1. unity 游戏存档
  2. 国务院关于印发《新一代人工智能发展规划的通知》
  3. qmmp安装包linux版,Qmmp音频播放器1.2.1发布下载(附Ubuntu 18.04下安装方法)
  4. 基于数据库的企业内部邮件系统的设计
  5. 基于JSP的IQ智力测试系统
  6. 跨利润中心外协业务生成利润中心结算凭证
  7. HTML5中canvas实现拼图游戏,HTML5 Canvas学习笔记(6)拼图游戏(数字版)
  8. C4D R19学习之002视图窗口与基本操作
  9. 浏览器输入www.baidu.com之后,发生了什么?
  10. MDM 与 MAM 的区别