草庐IT

读Java性能权威指南(第2版)笔记02_ Java SE API技巧上

1. 压缩字符串1.1. Java61.2. 实验性1.3. compressedstring2. 字符串2.1. Java82.2. 所有都会编码为16位字符数组3. 紧凑字符串3.1. Java113.2. compactstring3.3. 8位字节数组3.3.1. 节约大量内存3.4. -XX:+CompactStrings标志控制的3.4.1. 默认是true3.5. 很成熟且性能良好3.6. 例外是应用程序中所有的字符串都需要16位编码3.6.1. 在紧凑字符串中对这些字符串进行操作的时间可能会稍长一些4. 删除重复字符串4.1. G1GC执行自动去重4.1.1. 让JVM找到重复

读Java性能权威指南(第2版)笔记02_ Java SE API技巧上

1. 压缩字符串1.1. Java61.2. 实验性1.3. compressedstring2. 字符串2.1. Java82.2. 所有都会编码为16位字符数组3. 紧凑字符串3.1. Java113.2. compactstring3.3. 8位字节数组3.3.1. 节约大量内存3.4. -XX:+CompactStrings标志控制的3.4.1. 默认是true3.5. 很成熟且性能良好3.6. 例外是应用程序中所有的字符串都需要16位编码3.6.1. 在紧凑字符串中对这些字符串进行操作的时间可能会稍长一些4. 删除重复字符串4.1. G1GC执行自动去重4.1.1. 让JVM找到重复

读Java性能权威指南(第2版)笔记11_堆内存上

1. 通用规则1.1. 不要假设问题出在堆空间1.2. 谨慎地创建对象并尽快丢弃它们1.3. 使用更少的内存是提高垃圾回收器效率最好的办法1.3.1. 减少内存使用是一个重要的目标1.3.2. 和大多数性能优化主题一样,将精力集中于最大化利用现有内存会更有帮助1.4. 对象重用方式1.4.1. 线程局部变量1.4.2. 特殊对象引用1.4.3. 对象池1.5. 重用对象意味着它们将长期存在并会影响垃圾回收器1.5.1. 当它们被合理地重用时,整体性能将得到提升2. 堆直方图2.1. heaphistogram2.2. 快速查看应用程序中对象数量的方法,不需要生成完整堆转储2.3. 用于识别由于

读Java性能权威指南(第2版)笔记11_堆内存上

1. 通用规则1.1. 不要假设问题出在堆空间1.2. 谨慎地创建对象并尽快丢弃它们1.3. 使用更少的内存是提高垃圾回收器效率最好的办法1.3.1. 减少内存使用是一个重要的目标1.3.2. 和大多数性能优化主题一样,将精力集中于最大化利用现有内存会更有帮助1.4. 对象重用方式1.4.1. 线程局部变量1.4.2. 特殊对象引用1.4.3. 对象池1.5. 重用对象意味着它们将长期存在并会影响垃圾回收器1.5.1. 当它们被合理地重用时,整体性能将得到提升2. 堆直方图2.1. heaphistogram2.2. 快速查看应用程序中对象数量的方法,不需要生成完整堆转储2.3. 用于识别由于

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

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. 一些芯片制造商称之为核心内的硬件线程(hardwarestrandswithinacore)2.4. 垃圾回收很大程度上是CPU密集型任务3. 软件容器3.1. 虚拟机3.

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

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. 一些芯片制造商称之为核心内的硬件线程(hardwarestrandswithinacore)2.4. 垃圾回收很大程度上是CPU密集型任务3. 软件容器3.1. 虚拟机3.

读Java性能权威指南(第2版)笔记28_线程和同步性能中

1. 同步1.1. 代码块对一组变量的访问看上去是串行的:每次只有一个线程可以访问内存1.1.1. 由synchronized关键字保护的代码块1.1.2. 用java.util.concurrent.lock.Lock类的实例保护的代码1.1.3. java.util.concurrent包中的代码1.1.4. java.util.concurrent.atomic包中的代码1.1.4.1. 原子类不使用同步,至少在CPU编程方面是这样1.1.4.1.1. 使用CAS指令的线程在同时访问同一资源时不会阻塞1.1.4.2. 原子类利用了比较并交换(CompareandSwap,CAS)CPU指

读Java性能权威指南(第2版)笔记28_线程和同步性能中

1. 同步1.1. 代码块对一组变量的访问看上去是串行的:每次只有一个线程可以访问内存1.1.1. 由synchronized关键字保护的代码块1.1.2. 用java.util.concurrent.lock.Lock类的实例保护的代码1.1.3. java.util.concurrent包中的代码1.1.4. java.util.concurrent.atomic包中的代码1.1.4.1. 原子类不使用同步,至少在CPU编程方面是这样1.1.4.1.1. 使用CAS指令的线程在同时访问同一资源时不会阻塞1.1.4.2. 原子类利用了比较并交换(CompareandSwap,CAS)CPU指

读Java性能权威指南(第2版)笔记28_线程和同步性能中

1. 同步1.1. 代码块对一组变量的访问看上去是串行的:每次只有一个线程可以访问内存1.1.1. 由synchronized关键字保护的代码块1.1.2. 用java.util.concurrent.lock.Lock类的实例保护的代码1.1.3. java.util.concurrent包中的代码1.1.4. java.util.concurrent.atomic包中的代码1.1.4.1. 原子类不使用同步,至少在CPU编程方面是这样1.1.4.1.1. 使用CAS指令的线程在同时访问同一资源时不会阻塞1.1.4.2. 原子类利用了比较并交换(CompareandSwap,CAS)CPU指

读Java性能权威指南(第2版)笔记28_线程和同步性能中

1. 同步1.1. 代码块对一组变量的访问看上去是串行的:每次只有一个线程可以访问内存1.1.1. 由synchronized关键字保护的代码块1.1.2. 用java.util.concurrent.lock.Lock类的实例保护的代码1.1.3. java.util.concurrent包中的代码1.1.4. java.util.concurrent.atomic包中的代码1.1.4.1. 原子类不使用同步,至少在CPU编程方面是这样1.1.4.1.1. 使用CAS指令的线程在同时访问同一资源时不会阻塞1.1.4.2. 原子类利用了比较并交换(CompareandSwap,CAS)CPU指