关于Java虚拟机性能调优的清单

原创 2017年09月03日 16:15:41

导语

通过前面的学习,你已经了解了Java虚拟机的运行时数据区域还有垃圾收集的内幕,从理论上来讲,你已经可以对内存溢出、垃圾收集时间过长等问题进行调优,当然,你还需要一些工具,来提高你调优的效率,因此,这一讲,给你整理了Java虚拟机性能调优所需要的全部资料的清单,方便你在调优时进行查找,而在下一讲,我们就将使用这个清单,来进行调优实战训练。

本文是Effective Java专栏Java虚拟机专题的第八讲,如果你觉得看完之后对你有所帮助,欢迎订阅本专栏,也欢迎您将本专栏分享给你身边的工程师同学。


理论知识

任何实战都是建立在扎实的理论基础上的,尤其是计算机科学,你别想着能够像牛顿那样坐着一动不动就会有苹果去砸他然后发现万有引力,面对着一台电脑,你不动,它岿然不动也。

要想对Java虚拟机进行内存调优,这些前置课程是你必须要学习的:


Java HotSpot 虚拟机参数清单

在虚拟机调优的过程中,我们需要指定垃圾收集器、指定垃圾收集器的配置,这些都需要我们对虚拟机参数进行配置。HotSpot虚拟机提供了很多参数给用户对其进行配置,比如之前所讲的-client、-Xmx等(如何使用这些参数?),这些参数可以分为两种:标准的(standard)和非标准的(non-standard),其中非标准的都分为-X和-XX开头两种,X的含义和《X战警》里的X是一样的,代表未知的意思,X越多,说明这种参数的不稳定性越高。

  • 标准参数:这些参数非常稳定,并且HotSpot保证在后面的版本中会一直存在,比如-client、-server、-version等。
  • -X参数:这些参数以-X开头,Java不保证在所有虚拟机实现中都可以使用。
  • -XX参数: 这些参数以-XX开头,比-X更加不稳定(可能有bug的意思)。

这些参数的介绍,可以在Oracle的官网中查看,传送门:Java HotSpot VM Options


Java虚拟机性能监控和故障处理工具

了解了上面这些基本的理论知识,现在你需要一些强力的工具,来帮助你分析虚拟机的性能。

打开Java安装目录下的bin文件夹,你会看到除了我们常用的java和javac,居然还有很多其他的文件:


这些工具里面,有不少是Java提供的用于监控虚拟机运行状况的,既有命令行工具,如jstackjmap这两个特别常用的命令,也有像Visual VMJConsole这样的图形化界面。同样的,我给你找到了Oracle上对这些工具最原汁原味的讲解,传送门:Java Platform, Standard Edition Troubleshooting Guide - Diagnostic Tools


当然,JDK没有提供对jmap命令产生的dump文件的图形化界面,只提供了jhat命令来分析,对于dump文件的图形化工具,你可以使用eclipse memory analyer.


总结

这一讲,归纳总结了进行虚拟机调优的必备知识清单,方便你在调优时对照着进行参考,同时,我们也将在下一讲,利用这份清单,来进行一个Java虚拟机调优实战训练。


干货分享

文末分享一下一些关于虚拟机调优的好文章:

HotSpot Virtual Machine Garbage Collection Tuning Guide —— Oracle官网上的,权威、原汁原味的介绍了垃圾收集器的;

Tuning Java Virtual Machines (JVMs) —— 也是Oracle官网上的,相比于上一篇,这一篇少了写理论,更多的是经验和实战的指导;

《深入理解Java虚拟机》 —— 国内虚拟机的经典之作,豆瓣评分8.7、亚马逊4.2、京东自营计算机与互联网销量榜 第17位(我觉得我可以去搞一下图书查询APP);

Java Performance Tuning, Profiling, and Memory Management —— DZone上的一篇文章,国内我还没看到有写的既清晰又有深度的博客;

CSDN Effective Java专栏 —— 哈哈哈,我自己的专栏;










版权声明:本文为博主原创文章,未经博主允许不得转载。

关于Java虚拟机性能调优方法的一些分析

关于性能调优: 1 需要一个性能探测器,找到调用最频繁的代码段,优化这部分代码(优化算法) 2 往往1%的代码运行时间占99%。所以优化这些代码就能事半功倍。 3 最好是能看懂编译后的代码,这样分析最...
  • u013458516
  • u013458516
  • 2015年09月21日 00:41
  • 1126

深入JVM之Java内存模型

深入JVM之Java内存模型 所有的程序代码都必须保存在.java的文件之中,这些称为源代码。而这些源代码并不能直接执行,必须使用javac.exe命令将其编译为.class文件,而后利用j...
  • qq_34280276
  • qq_34280276
  • 2016年10月10日 23:26
  • 220

Java虚拟机的性能监控与调优

3 JVM的性能监控 3.1 监控的指标和工具 3.1.2  jps:虚拟机进程状况工具 利用jps工具可以显示当前虚拟机中运行的java进程,并且jps后面可以跟参数,-l是输出主类名,-v可以输出...
  • u014574317
  • u014574317
  • 2017年06月03日 11:37
  • 441

深入理解java虚拟机(一)----jvm内存模型

最近大致的学习了一下jvm的相关技术,发现深入理解java虚拟机这本书很不错,所以想将这本书的内容的重难点在blog总结一下,一是为了巩固这些知识,二是为了把这些重点单独写出来,让初学者在学习的时候有...
  • zx64881926
  • zx64881926
  • 2017年01月25日 23:06
  • 263

JVM内存模型,以及JVM性能调优

转载批注:最近因与别人讨论问题时,问到JVM内存模型,但是苦于只知道JVM的大概内容,不知道详细,也罢,近期会逐渐有充足的自己的时间,好好整理学习学习。以下内容为转载别人的资料,个人认为写的很好,就全...
  • xzknet
  • xzknet
  • 2015年03月11日 12:03
  • 3927

Java性能调优的11个实用技巧

大多数开发人员认为性能优化是个比较复杂的问题,需要大量的经验和知识。是的,这并不没有错。诚然,优化应用程序以获得最好的性能并不是一件容易的事情,但这并不意味着你在没有获得这些经验和知识之前就不能做任何...
  • FL63Zv9Zou86950w
  • FL63Zv9Zou86950w
  • 2017年11月03日 21:58
  • 15987

深入理解java虚拟机之JVM调优配置

转载文章:http://blog.csdn.net/sivyer123/article/details/17139443 堆内存设置 原理 JVM堆内存分为2块:Permanent Spa...
  • upwind_fly
  • upwind_fly
  • 2016年01月13日 14:29
  • 1477

Java性能调优常用方法

原文地址:http://www.xttblog.com/?p=621 Java性能优化分层模型 根据我的分层,应用层、数据库层、框架层、JVM 层四个层,每层优化难度逐级增加,...
  • Mr__fang
  • Mr__fang
  • 2016年07月07日 10:38
  • 965

Java学习路程掌握的技能清单

我们在学习的过程中有时候会很迷茫,有时候感觉很忙,有时候又不知道该做什么,想快速提高自己又不知道该看些什么,从哪里学起。这里收集一些作为Java开发必备的知识,如果不知道该从哪里学起,不妨看看这里哪些...
  • SongYuxinIT
  • SongYuxinIT
  • 2017年08月07日 09:05
  • 465

【JVM调优(一)】----JAVA内存模型抽象结构

线程之间的通信机制有两种:共享内存和消息传递。     Java线程之间的通信由Java内存模型(JMM)控制,JMM控制一个线程对共享变量的写入什么时候对另一个线程可见。下图是JMM的抽象结构: ...
  • u010853701
  • u010853701
  • 2016年08月04日 09:37
  • 1062
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于Java虚拟机性能调优的清单
举报原因:
原因补充:

(最多只允许输入30个字)