java性能优化策略

简介: · 当进行过多的字符串操作以避免不必要地创建那些最终必须经历垃圾收集的对象时,可使用 StringBuffer 功能而不是字符串并置。

· 当进行过多的字符串操作以避免不必要地创建那些最终必须经历垃圾收集的对象时,可使用 StringBuffer 功能而不是字符串并置。
· 避免连续写入 Java 控制台以减少字符串操作、文本格式化以及输出的花费。
· 必要时通过使用变量的原语类型来避免对象创建和操作的花费。
· 对常用对象进行高速缓存,以减少必须的垃圾收集量,并避免重新创建对象的需要。
· 尽可能分组本地操作以减少 Java 本地接口(JNI)的调用。
· 仅当在 JVM 和操作系统中必须限制多任务时才使用同步方法。
· 除非必要避免调用垃圾回收器。如果您必须调用它,只有在空闲时间或一些非关键阶段再这样做。
· 尽可能使用整型而不是长整型,因为 32 位操作的执行快于 64 位操作。
· 尽可能声明方法为 final。JVM 可较好地处理 final 方法。
· 在创建常量以减少需要初始化变量的次数时请使用关键字 static final。
· 避免不必要的“casts”和“instanceof”引用,因为 Java 中的数据类型转换是在运行时完成的。
· 当数组可以满足要求时尽可能避免使用向量。
· 把项添加到向量尾部或从向量尾部删除项。
· 使用 -O 选项编译 Java 文件。
· 避免在循环中分配对象。
· 使用缓冲区 I/O 并调整缓冲区大小。
· 使用连接池和准备缓存声明进行数据库访问。
· 使用连接池连接到数据库并重用连接而不是重复打开和关闭连接。
· 最大化和最小化线程创建和销毁周期。
· 最小化共享资源的争用。
· 最小化短生命周期对象的创建。
· 避免远程方法调用。
· 使用回调以避免阻塞远程方法调用。
· 避免创建仅用于访问方法的对象。
· 保持同步方法处于循环外。
· 在数据库中以 Unicode 形式存储字符串和字符数据。
· 对 CLASSPATH 重新排序使得最常用的库先出现。
· 避免在循环条件中使用复杂表达式。
· 使用"System.arraycopy()"代替循环来复制数组。
· 让访问实例的内变量的getter/setter方法变成"final"。
· 使用位移运算来代替"a/b"和"a*b"。
· 不在循环中调用synchronized方法。
· 将try/catch块移出循环。
· 对于boolean值,要避免不必要的等式判断。
· 用StringTokenizer来代替"indexOf()"和"subStrng"等字符串分析方法。
· 多多使用 x? y:z 来代替条件判断
· 不在循环体中实例化变量
· 确定StringBuffer的容量
· 尽可能的使用栈变量
· 尽量不使用取反操作(!)
· 尽量与一个接口进行instanceof操作而不是一个类
· 解析XML的时候,如果不需要序列化、验证可以考虑使用XPP模型(XML Pull    Parser(XPP) )http://www.extreme.indiana.edu/soap/xpp/
·针对Map元素操作时于某种原因要创建一个集合元素的数组而非迭代这些元素,则应使用该数组迭代元素。 但如果您不需要此中间数组,则不要创建它,而是使用 Iterator 迭代元素。
int mapsize = aMap.size();
Iterator keyValuePairs1 = aMap.entrySet().iterator();
for (int i = 0; i < mapsize; i++)
{
  Map.Entry entry = (Map.Entry) keyValuePairs1.next();
  Object key = entry.getKey();
  Object value = entry.getValue();
  ...
}
建议使用:
Object[] keyValuePairs2 = aMap.entrySet().toArray();
for (int i = 0; i < rem; i++) {
{
  Map.Entry entry = (Map.Entry) keyValuePairs2[i];
  Object key = entry.getKey();
  Object value = entry.getValue();
  ...
}
·Map 通常适合按键(而非按值)进行访问.对使用 containsKey() 和 containsValue() 遍历 HashMap 中所有元素所需时间的测试表明,containsValue() 所需的时间要长很多
·取的哈希值的是很可以考虑使用
int hashvalue = (key.hashCode() & 0x7FFFFFFF) % table.length;
它实质上等于
int hashvalue = Maths.abs(key.hashCode()) % table.length;
但使用更快机制获取正值的同一函数
·调整Map的大小,使用(capacity)Map 的默认大小将引发多次调整大小操作,开销很大,在服务器模式(java -server)下要多用 50% 的时间,而在客户端模式下几乎要多用两倍的时间!奇数个存储桶使 map 能够通过减少冲突数来提高执行效率
·申明Map变量的是很尽量使用接口申明:如:
Map criticalMap = new HashMap(); //好
HashMap criticalMap = new HashMap(); //差

·JDK5.0版本以上的JVM 可以在运行程序的时候设置(java --XX:PermSize=128m
)来改善提高堆分配和垃圾回收效率(当有很多class将要被加载到VM的程序)

·在将要进行循环时,当collection对象能够使用collection.size()得到大小就不要使用Iterator.hasNext()和Enumerator.hasMoreElements()来取得。

·String.equals()不单单能判断2个字符串是否相等,也能更有效率的判断该字符串的长度是否为0

·使用I/O操作时要选择有Buffered I/O classes

·使用private和static的方法以及final classes ,他们能在编译的时候变成内联的形式。

·尽量使用JAR 或 ZIP 文件

·从String类型创建Doubles类型非常慢

可以通过观查字节码找的优化点,观查字节码的步骤:
javac -g Demo.java
javap -c -p Demo
字节码的意义可以到JDK Documents上面找
 

目录
相关文章
|
18天前
|
Kubernetes Java Android开发
用 Quarkus 框架优化 Java 微服务架构的设计与实现
Quarkus 是专为 GraalVM 和 OpenJDK HotSpot 设计的 Kubernetes Native Java 框架,提供快速启动、低内存占用及高效开发体验,显著优化了 Java 在微服务架构中的表现。它采用提前编译和懒加载技术实现毫秒级启动,通过优化类加载机制降低内存消耗,并支持多种技术和框架集成,如 Kubernetes、Docker 及 Eclipse MicroProfile,助力开发者轻松构建强大微服务应用。例如,在电商场景中,可利用 Quarkus 快速搭建商品管理和订单管理等微服务,提升系统响应速度与稳定性。
31 5
|
19天前
|
安全 Java 调度
Java 并发编程中的线程安全和性能优化
本文将深入探讨Java并发编程中的关键概念,包括线程安全、同步机制以及性能优化。我们将从基础入手,逐步解析高级技术,并通过实例展示如何在实际开发中应用这些知识。阅读完本文后,读者将对如何在多线程环境中编写高效且安全的Java代码有一个全面的了解。
|
29天前
|
监控 IDE Java
【Java性能调优新工具】JDK 22性能分析器:深度剖析,优化无死角!
【9月更文挑战第9天】JDK 22中的性能分析器为Java应用的性能调优提供了强大的支持。通过深度集成、全面监控、精细化分析和灵活报告生成等核心优势,性能分析器帮助开发者实现了对应用性能的全面掌控和深度优化。在未来的Java开发过程中,我们期待性能分析器能够继续发挥重要作用,为Java应用的性能提升贡献更多力量。
|
1月前
|
存储 Java 程序员
优化Java多线程应用:是创建Thread对象直接调用start()方法?还是用个变量调用?
这篇文章探讨了Java中两种创建和启动线程的方法,并分析了它们的区别。作者建议直接调用 `Thread` 对象的 `start()` 方法,而非保持强引用,以避免内存泄漏、简化线程生命周期管理,并减少不必要的线程控制。文章详细解释了这种方法在使用 `ThreadLocal` 时的优势,并提供了代码示例。作者洛小豆,文章来源于稀土掘金。
|
2月前
|
安全 Java 程序员
Java编程中实现线程安全的策略
【8月更文挑战第31天】在多线程环境下,保证数据一致性和程序的正确运行是每个程序员的挑战。本文将通过浅显易懂的语言和实际代码示例,带你了解并掌握在Java编程中确保线程安全的几种策略。让我们一起探索如何用同步机制、锁和原子变量等工具来保护我们的数据,就像保护自己的眼睛一样重要。
|
11天前
|
设计模式 监控 Java
重构与优化-前言(java)
重构与优化-前言(java)
|
2月前
|
算法 Java 数据库
Java 性能优化秘籍:在数字化浪潮中,让你的应用如火箭般飞驰!
【8月更文挑战第30天】Java 作为一种广泛使用的编程语言,其性能优化是开发者关注的重点。优化需基于对 Java 内存模型、垃圾回收及线程并发模型的理解。合理的垃圾回收算法与线程安全措施、锁机制的应用至关重要。实践中,避免不必要的对象创建可减轻内存压力;优化数据库操作,如合理使用索引和查询语句,同样重要。JVM 参数调优,如调整堆大小和垃圾回收器选择,也能显著提升性能。综合运用这些策略并通过持续测试与调整,可以使 Java 应用在高并发和大数据量场景下保持高效运行,提供流畅的用户体验。
44 3
|
2月前
|
IDE Java 测试技术
揭秘Java高效编程:测试与调试实战策略,让你代码质量飞跃,职场竞争力飙升!
【8月更文挑战第30天】在软件开发中,测试与调试对确保代码质量至关重要。本文通过对比单元测试、集成测试、调试技巧及静态代码分析,探讨了多种实用的Java测试与调试策略。JUnit和Mockito分别用于单元测试与集成测试,有助于提前发现错误并提高代码可维护性;Eclipse和IntelliJ IDEA内置调试器则能快速定位问题;Checkstyle和PMD等工具则通过静态代码分析发现潜在问题。综合运用这些策略,可显著提升代码质量,为项目成功打下坚实基础。
48 2
|
2月前
|
缓存 负载均衡 算法
Java性能优化实战:从代码到部署的全方位攻略
在软件开发的世界里,性能是金。本文将通过浅显易懂的语言和具体案例,带你了解如何从编写更高效的Java代码开始,到利用JVM调优工具,再到部署环境的精细调整,全面提升你的Java应用性能。你将学会如何识别瓶颈、选择正确的数据结构和算法、进行垃圾回收调优,以及使用现代硬件优势来加速你的应用。无论你是新手还是资深开发者,这篇文章都将为你的Java性能优化之旅提供宝贵的指导。
|
2月前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
26 1
下一篇
无影云桌面