Skip to content

Latest commit

 

History

History
27 lines (15 loc) · 2.33 KB

File metadata and controls

27 lines (15 loc) · 2.33 KB
# 4.7 小结

在并行环境下,编码和调试都不是件轻松的事,在Java内建的同步机制和JDK自带的相关数据结构帮助下,工作会稍微轻松一点点。Java在语言级支持同步操作,每个对象都可以作为监视器对象来实现同步。要说缺点的话,恐怕就是同步操作太容易使用,导致有时会被滥用。

本章对Java内存模型和旧版内存模型的问题做了简单介绍,内存模型的存在使Java在各个硬件平台的行为得以统一。

此外,本章对虚拟机中同步和线程的实现做了简单讲解,并用瘦锁和胖锁来介绍自适应锁的常见实现。在自适应环境中,锁会根据运行时的反馈,得知线程的竞争情况,从而发生膨胀或收缩。

在本章中,对锁的一些基本优化方法做了简单介绍,效果最显著的优化是延迟解锁,以及代码生成器为执行锁融合而做的优化。

在"陷阱与伪优化"一节中介绍了并行编程中常见的一些陷阱,包括Thread.stop方法Thread.suspend方法和Thread,resume方法,以及双检查锁存在的问题。当然,并行编程中最大的陷阱就是不理解Java内存模型。

最后,本章对JRockit中与线程和同步相关的命令行参数,以及一些可用于控制JVM中锁行为的参数做了简要介绍。

下一章中将会对应用程序的基准测试做介绍。使用基准测试可以避免应用程序在开发过程中出现性能退步的情况,还可以为性能优化提供有用的数据。只有深入理解JVM内部原理和运行机制的情况下,才能做好基准测试和性能测量。到目前为止,本书已经对代码生成、内存管理和线程同步的基本知识做了简单介绍,希望读者能有所收获。

译者注:

instrumentation一词从以往我就翻译不出来,这次又遇到了。在Fenng的博客中看到 性能测量这个词,虽然我觉着不太完整(因为Java中的Intrumentation不仅可以用来做性能测量,还可以实现对字节码的操纵),姑且先用一下,在此表示感谢。