1.JVM调优标志1.1.布尔标志和附带参数的标志1.2.布尔标志使用的语法1.2.1.-XX:+FlagName表示开启1.2.2.-XX:-FlagName表示关闭1.3.附带参数的标志使用的语法1.3.1.-XX:FlagName=something,表示设置FlagName的值为something2.多核硬件2.1.超线程是Intel常用的术语2.2.AMD(和其他厂商)则使用同时多线程2.3.一些芯片制造商称之为核心内的硬件线程(hardware strands within a core)2.4.垃圾回收很大程度上是CPU密集型任务3.软件容器3.1.虚拟机3.1.1.在运行的硬件子集上建立了完全隔离的操作系统副本3.2.Docker3.2.1.只是操作系统中的一个进程(可能受资源限制)3.2.2.Java有丰富的性能问题诊断工具集,而Docker容器里没有3.2.3.在Docker中以小数形式限制CPU数量,Java会对小数向上取整4.全面的性能4.1.通用的准则4.1.1.给已经过载的系统增加负载,系统的性能会变差4.1.2.给系统中低效的部分增加负载会让整个系统变慢4.1.2.1.将负载添加到CPU密集型服务器上4.1.2.2.让更多线程去获取已经有线程等待的锁4.2.写出更好的算法4.2.1.好的算法对于提升性能是至关重要的4.2.1.1.没有可行的优化方式,能让基于数组的代码和使用哈希映射(hash map)一样快4.3.写更少的代码4.3.1.定期的性能测试可以找出性能下降的原因4.3.2.每个应用程序的性能都会随着时间下降4.3.2.1.随着应用程序新版本的发布而下降4.3.3.添加新特性和使用新标准只会导致应用程序越来越大、越来越慢4.4.过早优化4.5.数据库永远是瓶颈4.6.测试工具也是最有可能出问题的4.7.常见优化4.7.1.通过分析来优化代码,并专注于优化其中最耗时的操作4.7.2.使用奥卡姆剃刀原理来诊断性能问题4.7.2.1.新增代码的bug比机器配置更有可能带来性能问题4.7.2.2.机器配置比JVM和操作系统的bug更有可能带来性能问题4.7.3.为应用程序的常见操作提供简单的算法4.8.JVM只是整体性能的一小部分4.9.数据库和其他后端系统的性能同JVM一样重要