《程序员》2010精华本笔记

由于之前学JAVA时看的视频是基于J2SE 1.4的,这些天看2010年的《程序员》精华本,竟也有不少收获。现在记录如下:

1、自动选择垃圾收集器、Heap大小及运行时编译器。
  JDK5中,引入了成本计算,即根据的成本来动态地调整收集器的具体策略,例如在采用Parallel Scavenge GC 的情况下,每次minor GC后会对eden、to以及TenuringThreshold的大小进行动态调整。JDK 6 在按照成本计算调整收集器策略、编译策略方面做了更多努力,但从实际运行情况来看,Parallel Scavenge GC有时反而会造成更严重的Fulll GC, 但相信随着JDK 7中Garbage First 的逐渐成熟,JDK在根据成本计算进行策略调整方面也会越来越成熟。

2、高精度的时间测量
    在JDK 5 之前,只能通过 System.currentTimeMillis来测量程序的性能,在JDK 5之后 推出了System.nanoTime,使得它可以在更高的精度来测量程序的性能。

3、StringBuilder
    在JDK 5 之前,经常会听到有经验的开发人员强调,字符串相加要用StringBuffer;但StringBuffer是线程安全的,对于某些场景而言,性能仍然不够高;因此在JDK 5中推出了StringBuilder,其是非线程安全的,并且在默认情况下,JDK 5 在编译代码时会将字符串的相加操作自动转为StringBuilder.append的方式。

笔记:以前做字符串拼接,一开始用的是加号。后来改为使用StringBuffer。后来看到StringBuilder。但是现在看到这一条后,我在想,我还有必要将字符串的拼接从加号改为用StringBuffer或StringBuilder吗?如果会被优化的话。

4、锁粗化
    对于经常加锁、释放锁,而在这个加锁、释放锁的过程又没做什么动作的话,JDK会选择将锁进行粗化,即将多次的加锁和释放锁的动作合并为一次。

你可能感兴趣的:(java,jdk,GC)