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找到重复
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找到重复
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. 用于识别由于
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. 用于识别由于
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.
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.
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指
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指
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指
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指