zl程序教程

您现在的位置是:首页 >  Java

当前栏目

读Java性能权威指南(第2版)笔记01_导言

2023-03-31 10:36:44 时间

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更有可能带来性能问题

4.7.3. 为应用程序的常见操作提供简单的算法

4.8. JVM只是整体性能的一小部分

4.9. 数据库和其他后端系统的性能同JVM一样重要