
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的值为something
2. 多核硬件
2.1. 超线程是Intel常用的术语
2.2. AMD(和其他厂商)则使用同时多线程
2.3. 一些芯片制造商称之为核心内的硬件线程(hardware strands within a core)
2.4. 垃圾回收很大程度上是CPU密集型任务
3. 软件容器
3.1. 虚拟机
3.1.1. 在运行的硬件子集上建立了完全隔离的操作系统副本
3.2. Docker
3.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更有可能带来性能问题
文章探讨了JVM的调优标志,包括布尔标志和附带参数的使用,以及其对多核硬件环境的影响。同时,提到了软件容器如Docker在性能优化上的特点和限制。强调全面性能优化的重要性,如选择合适的算法、减少代码量,避免过早优化,并指出数据库往往是性能瓶颈。最后,提醒关注测试工具的稳定性和问题定位的方法。

被折叠的 条评论
为什么被折叠?



