java如何优化
代码优化
避免重复计算,将重复使用的计算结果缓存起来。使用局部变量代替频繁访问的类成员变量或静态变量,减少访问开销。
// 优化前
for (int i = 0; i < list.size(); i++) {
// ...
}
// 优化后
int size = list.size();
for (int i = 0; i < size; i++) {
// ...
}
集合选择
根据场景选择合适的集合类。ArrayList适合随机访问,LinkedList适合频繁插入删除。HashMap在键值对存储时效率高,TreeMap在需要排序时使用。
// 随机访问多
List<String> arrayList = new ArrayList<>();
// 插入删除多
List<String> linkedList = new LinkedList<>();
// 需要快速查找
Map<String, Integer> hashMap = new HashMap<>();
// 需要排序
Map<String, Integer> treeMap = new TreeMap<>();
字符串处理
使用StringBuilder代替String进行大量字符串拼接操作。避免在循环中创建字符串,减少内存开销。
// 优化前
String result = "";
for (int i = 0; i < 100; i++) {
result += i;
}
// 优化后
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++) {
sb.append(i);
}
String result = sb.toString();
内存管理
及时释放不再使用的对象引用,避免内存泄漏。对于大对象,考虑使用对象池技术减少GC压力。

// 及时置空
List<String> largeList = new ArrayList<>();
// 使用后
largeList = null;
并发优化
合理使用线程池,避免频繁创建销毁线程。使用并发集合类如ConcurrentHashMap代替同步的HashMap。
// 使用线程池
ExecutorService executor = Executors.newFixedThreadPool(10);
// 使用并发集合
Map<String, Integer> concurrentMap = new ConcurrentHashMap<>();
JVM参数调整
根据应用特点调整JVM参数,包括堆大小、垃圾回收器等。对于内存密集型应用,增加堆大小;对于低延迟应用,选择适合的GC算法。
# 示例JVM参数
-Xms2g -Xmx2g -XX:+UseG1GC
算法优化
选择时间复杂度更低的算法。对于排序,数据量大时用快速排序,数据基本有序时用插入排序。查找多用二分查找代替线性查找。

// 二分查找
int index = Collections.binarySearch(sortedList, key);
缓存应用
对频繁访问且不常变化的数据使用缓存。可以使用Guava Cache或Caffeine等缓存库减少数据库访问。
// 使用Guava Cache
Cache<String, Object> cache = CacheBuilder.newBuilder()
.maximumSize(1000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build();
数据库优化
使用批量操作代替单条操作,合理使用索引。减少数据库交互次数,使用连接池管理数据库连接。
// 批量插入
String sql = "INSERT INTO table VALUES (?, ?)";
PreparedStatement ps = connection.prepareStatement(sql);
for (int i = 0; i < 100; i++) {
ps.setInt(1, i);
ps.setString(2, "value" + i);
ps.addBatch();
}
ps.executeBatch();
日志优化
合理设置日志级别,避免生产环境输出过多调试日志。对于高频日志,考虑异步日志框架。
// 使用SLF4J+Logback
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.debug("Debug message"); // 开发时使用
logger.info("Info message"); // 生产时使用






