改善Java性能的基本建议
简介:
改善Java性能的基本建议
Document #: 2811085C29001 Body: [标题]下面是在AIX上改善 Java 性能的基本建议· 当进行过多的字符串操作以避免不必要地创建那些最终必须经历垃圾收集的对象时,可使用 StringBuffer 功能而不是字符串并置。
|
改善Java性能的基本建议 |
Document #: 2811085C29001
Body:
[标题]
下面是在AIX上改善 Java 性能的基本建议
· 当进行过多的字符串操作以避免不必要地创建那些最终必须经历垃圾收集的对象时,可使用 StringBuffer 功能而不是字符串并置。 · 避免连续写入 Java 控制台以减少字符串操作、文本格式化以及输出的花费。 · 必要时通过使用变量的原语类型来避免对象创建和操作的花费。 · 对常用对象进行高速缓存,以减少必须的垃圾收集量,并避免重新创建对象的需要。 · 尽可能分组本地操作以减少 Java 本地接口(JNI)的调用。 · 仅当在 JVM 和操作系统中必须限制多任务时才使用同步方法。 · 除非必要避免调用垃圾回收器。如果您必须调用它,只有在空闲时间或一些非关键阶段再这样做。 · 尽可能使用整型而不是长整型,因为 32 位操作的执行快于 64 位操作。 · 尽可能声明方法为 final。JVM 可较好地处理 final 方法。 · 在创建常量以减少需要初始化变量的次数时请使用关键字 static final。 · 避免不必要的“casts”和“instanceof”引用,因为 Java 中的数据类型转换是在运行时完成的。 · 当数组可以满足要求时尽可能避免使用向量。 · 把项添加到向量尾部或从向量尾部删除项。 · 使用 -O 选项编译 Java 文件。 · 避免在循环中分配对象。 · 使用缓冲区 I/O 并调整缓冲区大小。 · 使用连接池和准备缓存声明进行数据库访问。 · 使用连接池连接到数据库并重用连接而不是重复打开和关闭连接。 · 最大化和最小化线程创建和销毁周期。 · 最小化共享资源的争用。 · 最小化短生命周期对象的创建。 · 避免远程方法调用。 · 使用回调以避免阻塞远程方法调用。 · 避免创建仅用于访问方法的对象。 · 保持同步方法处于循环外。 · 在数据库中以 Unicode 形式存储字符串和字符数据。 · 对 CLASSPATH 重新排序使得最常用的库先出现。
AIX 的 Java 调优
以下参数是适用于您的 JAVA 环境的推荐 AIX 设置: AIXTHREAD_SCOPE=S 该变量的缺省值为 P,表示进程级的争用作用域(M:N)。对于 Java 应用程序,您应该设置这个值为 S,它表示系统级争用作用域(1:1)。 AIXTHREAD_MUTEX_DEBUG=OFF 用调试器为使用目的维持一个活动人工干预列表。 AIXTHERAD_COND_DEBUG=OFF 用调试器为使用目的维持一个条件变量列表。 AIXTHREAD_RWLOCK_DEBUG=OFF 维护由调试器使用的活动互斥锁、条件变量和读写锁的列表。当初始化某个锁时,如果列表中没有这个锁,它就加入到该列表中。此列表以链表形式实现,因此当列表变大时通过搜索它来确定锁是否存在就暗含了性能问题。问题是此列表由锁保护的事实复合而成的,这个锁在搜索操作过程中一直持有。对 pthread_mutex_init() 子例程的其它调用必须等待,直到搜索完成为止。为获得最佳性能,应该将此线程调试选项的值设置为 OFF。它们的缺省值为 ON。 SPINLOOPTIME=500 一个进程在阻塞之前可以在繁忙锁上自旋的次数。这个值缺省设置为 40。如果 tprof 命令输出表明 check_lock 例程的 CPU 使用率很高,并且如果锁通常在短时间内可用,则您应该通过将值设置为 500 或更高来延长自旋时间。 同样,为您的 Java 环境推荐以下设置: ulimit -d 不限制 ulimit -m 不限制 ulimit -n 不限制 ulimit -s 不限制 操作系统内一定的环境参数和设置可以用来调优 Java 性能。此外,还有许多调优系统(如 CPU、内存、网络、I/O 等等)的技术可以提高 Java 的性能。 为获得尽可能好的 Java 性能和可伸缩性,请使用操作系统和 Java,以及即时(JIT)编译器的最新可用版本。 |
|