Java性能优化指南系列(一):概述和性能测试方法

  • Java性能分析是一门艺术和科学;科学指的是性能分析一般都包括大量的数字、测量和分析。绝大多数的性能工程师都有科学背景,运用科学的严谨是获取最大性能的重要组成部分。艺术部分指的是什么呢?性能调优是部分科学部分艺术的观点是很早就有的,但是关于性能的主题很少会给定特定的知识,这就是艺术的部分了,它和我们平常接受到的培训是不一样的,培训是确定了的。还有部分原因是对于某些人来说,性能调优是建立在深入的知识和经验上面的。这里艺术就是知识、经验直觉的使用。
  • 这本书不能帮助我们提升经验直觉,但是可以帮助我们提升对知识的深入理解,我们持有这样的观点:多次运用知识能够提升我们称为Java性能工程师的能力。这本书的目标就是给予我们对Java平台性能方面的深入理解。
  • 这种知识主要分为两大部分:一是JVM本身的性能,研究JVM的配置是如何影响程序的各方面性能的。其它语言的有经验的开发人员会发现这个调优是比较繁琐的,尽管实时上JVM的调优和C++程序员在编译的时候测试和选择不同编译器参数或者是PHP程序员在php.ini文件设置合适的变量是一样的。二是理解Java平台的特性是如何影响性能的。注意这里的平台,一些特性(比如:线程和同步)是语言的一部分,另外一些特性(比如:XML解析性能)是Java的标准API。尽管Java语言和Java API是不同的,但是这里我们把他们看成是类似的。
  • JVM的性能很大程度上是和调优参数相关的,平台的性能则和应用代码的优劣相关。很多时候,代码开发人员和性能测试小组是分割开的,认为他们是不同方面的专家。只有性能工程师能够对JVM虚拟机进行调优,以榨取更多的性能;只有开发人员才会关心代码写的好不好。区分这个是没有什么作用的--任何在Java平台上工作的人都需要了解这些。

平台和约定

  • 本书使用的平台是:Java 7update 40Java 8Java7是进行性能调优的一个好的起点,因为它提供了很多新的特性,比如:G1垃圾回收器,同时还提供了一些和性能相关的工具,便于我们可视化的查看Java应用的工作细节。Java8也做了较大幅度的改进(比如:引入lambda表达式)。
  • 尽管所有平台都会做兼容性测试,以便实现Java规范的功能;但对于本书来说,这里的兼容性是不够的,特别是tuning flag,每个JVM都会实现一个或多个垃圾收集器,但是它们的调优参数一般是不一样的,尽管这本书讨论的很多概念是适用于所有Java的实现平台的,但是对于一些调优参数和建议,那只适用于OracleJVMHotSpot)。

调优参数

  • 除了少部分例外,JVM会接受两种参数:boolean参数和带有参数的参数。Boolean参数使用-XX:+FlagName来开启参数,使用-XX:-FlagName来关闭参数。带有参数的参数,使用-XX:FlagName=something来设置参数值。当介绍某个参数的时候都会讨论它的默认值。这个默认值是不同方面的组合,比如:当前JVM运行在什么操作系统上面以及其它JVM命令行参数是什么。如果有疑问,可以使用-XX:+PrintFlagsFinal来查看在特定平台上面,给定JVM命令行参数会给其它参数什么默认值。对于这些会根据其它参数和平台来自动选定调优参数的过程,我们叫做ergonomics(不知道怎么翻译)。
  • Client classServer class:当JVM运行在32-bitwindows服务器上(不管有多少个CPU),或机器只有一个CPU,那么这台机器是Client class。其它机器都称之为server class

性能

  • 写更好的算法
  • 写更少的代码:需要编译的代码越多,代码运行快需要更多的时间;分配和丢弃的对象越多,GC需要更多的工作;分配和回收更多的对象,GC周期会更长;加载的类越多,程序启动需要更长的时间;执行的代码越多,命中硬件缓存的可能性越小;执行的代码越多,需要的时间越长。
  • 不要过早优化
  • 数据库(或其它第三方资源)常常是瓶颈
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值