J2SE 6(代号:Mustang野马)主要设计原则之一就是提升J2SE的性能和扩展能力,主要通过最大程度提升运行效率,更好的垃圾收集和一些客户端性能来达到。
1、偏向锁(Biased locking)
Java 6以前加锁操作都会导致一次原子CAS(Compare-And-Set)操作,CAS操作是比较耗时的,即使这个锁上实际上没有冲突,只被一个线程拥有,也会带来较大开销。为解决这一问题,Java 6中引入偏向锁技术,即一个锁偏向于第一个加锁的线程,该线程后续加锁操作不需要同步。大概的实现如下:一个锁最初为NEUTRAL状态,当第一个线程加锁时,将该锁的状态修改为BIASED,并记录线程ID,当这一线程进行后续加锁操作时,若发现状态是BIASED并且线程ID是当前线程ID,则只设置一下加锁标志,不需要进行CAS操作。其它线程若要加这个锁,需要使用CAS操作将状态替换为REVOKE,并等待加锁标志清零,以后该锁的状态就变成 DEFAULT,常用旧的算法处理。这一功能可用-XX:-UseBiasedLocking命令禁止。
2、锁粗化(Lock coarsening)
如果一段代码经常性的加锁和解锁,在解锁与下次加锁之间又没干什么事情,则可以将多次加加锁解锁操作合并成一对。这一功能可用-XX:-EliminateLocks禁止。
3、自适应自旋(Adaptive spinning)
一般在多CPU的机器上加锁实现都会包含一个短期的自旋过程。自旋的次数不太好决定,自旋少了会导致线程被挂起和上下文切换增加,自旋多了耗CPU.为此Java 6中引入自适应自旋技术,即根据一个锁最近自旋加锁成功概率动态调整自旋次数。
4、常用大内存分布的堆(large page heap)
在大内分页是x86/amd64架构上用来减小TLB(虚拟地址到物理地址翻译缓存)大小的TLB失配率。Java 6中的内存堆可以使用这一技术。
5、提高数组拷贝性能
对每种类型大小写一个定制的汇编数组拷贝程序。
6、后台进行代码优化
Background Compilation in HotSpot™ Client Compiler: 后台进行代码优化
7、线性扫描寄存器分配算法(Linear Scan Register Allocation)
一种新的寄存器分配策略,基于SSA(static single assignment),性能提高10%左右。常用的寄存器分配算法将寄存器分配看作图着色问题,时间复杂度是O(n^4),不适用于Java的JIT编译。原来的JVM里是根据一些本地启发式规则来分配寄存器,效果不太好,Java 6中使用的线性扫描寄存器算法能够达到与图颜色算法相似的效果,并且时间复杂度是线性的。
8、并行缩并垃圾收集器(Parallel Compaction Collector)
进行Full GC时使用并行垃圾收集(JDK 5里原来非Full GC是并行的但Full GC是串行的),使用-XX:+UseParallelOldGC开启这一功能
9、并行低停顿垃圾收集器(Concurrent Low Pause Collector)
显式调用gc(如System.gc)时也可以并行进行标记-清扫式垃圾收集,使用-XX:+ExplicitGCInvokesConcurrent开启。
10、Ergonomics in the 6.0 Java Virtual Machine
自动调整垃圾收集策略、堆大小等配置,这一功能在JDK 5中加入,JDK 6中得到显著增强,SPECjbb2005性能提高70%.
11、boot类装载器的优化
jre中增加一个描述package所在jar文件的元索引文件,加快classloader加载类性能,提高桌面Java应用启动速度(+15%)。内存占用也减少了10%
12、图形程序优化
在jvm启动之前显示splash.
Swing程序中每个窗口有一个后台显示缓存,当该窗口原来被遮挡,现在要显示时直接从该缓存拷贝数据进行渲染,即使该窗口的绘制线程被阻塞也可以完成这一渲染。
分享到:
相关推荐
《Java程序性能优化:让你的Java程序更快、更稳定》共6章,先后从软件设计、软件编码、JVM调优以及程序故障排斥等方面介绍针对Java程序的优化方法。第1章介绍性能的基本概念、定律、系统调优的过程和注意事项。第2...
Java性能调优 6步实现项目性能全面升级+面试高频性能问题讲解视频教程分享,性能优化的N种企业级解决方案,囊括了【数据库优化】、【Tomcat优化】、【JVM优化】、【垃圾回收】、【Netty优化】、【Nginx优化】、...
《Java程序性能优化:让你的Java程序更快、更稳定》共6章,先后从软件设计、软件编码、JVM调优以及程序故障排斥等方面介绍针对Java程序的优化方法。第1章介绍性能的基本概念、定律、系统调优的过程和注意事项。第2章...
Java程序性能优化是每个开发人员都需要关注的重要领域,它涵盖了多个方面,旨在提高代码执行效率,减少资源消耗,以及提升应用程序的稳定性和响应速度。在本文中,我们将深入探讨Java性能优化的关键点,帮助你的Java...
6. **配置**:调整配置以优化性能。 7. **仿形**:模拟真实环境下的系统行为。 8. **是否性能达标**:评估系统的实际性能是否满足预期目标。 #### 六、性能监控与仿型的区别 性能监控与仿型是两种不同的方法,各有...
Java 高性能系统常见设计与优化 Java 高性能系统常见设计与优化是指在 Java 语言中设计和优化高...6. 高性能系统的设计和优化需要考虑多方面的因素,如系统的架构、Java VM 的优化、数据库设计和优化、数据库访问等。
2. **《Java技术手册:第6版.pdf》** 这本手册全面覆盖了Java语言的各个方面,包括内存管理、垃圾收集机制、并发编程、JVM优化等。其中,理解JVM的工作原理对性能优化至关重要,如了解类加载机制、方法区、堆内存和...
6. **I/O优化**:文件读写、网络通信等I/O操作的优化,如使用NIO(非阻塞I/O)提升性能。 7. **类加载器和类初始化**:了解类加载过程,防止不必要的类加载和初始化,减少启动时间和内存占用。 视频教程可能通过...
总之,"桌宠必备JAVA6"是因为Java 6提供了丰富的GUI工具、性能优化、XML处理、安全性和其他开发者工具,使得开发桌面宠物软件变得更加便捷高效。而压缩包中的"jre-6u30-windows-i586.exe"是Java Runtime Environment...
Java 代码性能优化技巧总结 Java 代码性能优化是每个 Java 开发者都需要掌握的重要技能。以下是对 Java 代码性能优化的各种技巧的总结: 字符串池的实现 在 Java 中,字符串池(String Intern Pool)是通过使用...
6. Java命令配合特定参数可用来查看JDK的版本以及JVM启动时的初始和最大堆大小。如`java -XX:+PrintFlagsFinal -version 2>&1 | grep MaxHeapSize`命令用于查看最大堆大小。 7. Java.lang.OutOfMemoryError是一种...
6. **方法调用树**:性能分析工具通常会提供方法调用关系图,显示哪些方法被频繁调用,耗时较长。这有助于定位热点代码,进行代码优化。 7. **JMX(Java Management Extensions)**:JMX提供了一种标准的方式来管理...
【Java EE性能优化】 Java EE(Java Platform, Enterprise Edition)是用于构建企业级Web应用的标准框架,其性能直接影响到整个系统的效率和响应速度。在实际应用中,开发者经常会遇到性能瓶颈,以下是一些常见的...
Java性能调优是一个复杂而重要的领域,涉及到程序的运行效率、资源消耗以及系统的稳定性。这份“Java性能调优大全”提供了全面的指南,包括VisualVM的使用、JVM的性能优化、OMM(可能是指Oracle Management Monitor...
常见的Java性能分析工具有JProfiler、VisualVM、YourKit Java Profiler等。这些工具提供了深入的性能指标,如CPU使用率、内存分配、线程状态等,帮助开发者诊断和优化代码。 例如,JProfiler提供了丰富的可视化界面...
### Eclipse 开发性能优化与 Java 代码性能优化 在日常的软件开发过程中,尤其是在使用 Eclipse 进行 Android 开发时,经常会遇到 IDE 运行缓慢的情况。为了提高开发效率,本文将详细介绍 Eclipse 开发环境及 Java ...
本主题“代码性能Java比较”将深入探讨Java代码性能的各种方面,结合二十三种设计模式的实践应用,帮助开发者提升编程技巧。 首先,我们来谈谈Java代码性能的优化。Java性能优化涵盖了许多领域,如内存管理、线程...