科普文:Java基础系列之【Java代码性能优化实践】

262 篇文章 0 订阅
172 篇文章 1 订阅

Java 性能优化是一个涵盖代码编写、内存管理、垃圾回收、数据库访问等多个方面的过程。

结合实际案例不断进行实践与总结,并依据实际情况采用适当的优化策略。

在实际编码过程中,保持对性能优化的关注,不断反思和改进代码,有助于获得高性能 Java 应用。

Java 作为一种广泛应用的编程语言,性能优化在很大程度上决定了程序的运行效率。

优化 Java 性能可以大幅提高程序执行速度、减少程序资源占用,从而满足现代复杂软件系统的需求。

本文将介绍一些 Java 性能优化的关键技术和实践要点。需要的同学,可以自行翻阅之前的性能优化文章。

科普文:微服务之微服务性能优化【请求合并】设计和实现_微服务链路性能优化-CSDN博客

实战:微服务之Spring Cloud 熔断保护组件Hystrix请求合并-CSDN博客

实战:微服务之Spring Cloud性能优化、提高接口性能【三种方式实现请求合并】-CSDN博客

科普文:Java基础系列之后端性能优化汇总-CSDN博客

科普文:Java基础系列之SpringBoot中8项配置优化提升Tomcat性能-CSDN博客

科普文:微服务之微服务性能优化【后端接口性能优化 】操作说明_微服务如何提高接口并发-CSDN博客

代码优化

优化代码结构

合理组织代码和方法,以简化代码逻辑和加速程序执行。例如,使用哈希表(HashMap)进行查找操作,而不是使用线性的数组遍历

Map<String, Integer> map = new HashMap<>();map.put("A", 1);map.put("B", 2);
int value = map.get("B"); // 直接根据键获取值,效率高

复制代码

使用局部变量

局部变量的使用范围较小,其在内存中的生命周期相对较短。这有助于减少垃圾回收的次数,从而提高程序性能。

public void printSum(int a, int b) {    int sum = a + b; // 使用局部变量进行计算    System.out.println("Sum: " + sum);}

复制代码

内存管理

减少对象的创建

频繁地创建和销毁对象会增加垃圾回收的负担。使用单例模式(Singleton Pattern)可以避免创建过多的对象实例

public class Singleton {    private static Singleton instance;
    private Singleton() {}
    public static synchronized Singleton getInstance() {        if (instance == null) {            instance = new Singleton();        }        return instance;    }}

复制代码

使用缓存

利用 HashMap 实现一个简单的缓存,避免重复计算斐波那契数列的值

public class FibonacciCache {    private static final Map<Integer, Integer> cache = new HashMap<>();
    public static int fibonacci(int n) {        if (n <= 1) {            return n;        } else if (cache.containsKey(n)) {            return cache.get(n);        } else {            int result = fibonacci(n - 1) + fibonacci(n - 2);            cache.put(n, result);            return result;        }    }}

复制代码

字符串优化

使用 StringBuilder

在进行字符串拼接操作时,使用 StringBuilder 以减少内存分配

public String createString(int n) {    StringBuilder sb = new StringBuilder();    for (int i = 0; i < n; i++) {        sb.append("hello");    }    return sb.toString();}

复制代码

垃圾回收

选择合适的垃圾回收器并调整 Java 虚拟机参数。例如,使用 G1 垃圾回收器并设置堆的最小和最大大小

java -XX:+UseG1GC -Xms512m -Xmx1024m MyJavaApp

复制代码

多线程和并发

使用 ExecutorService 管理线程

ExecutorService executor = Executors.newFixedThreadPool(4);
for (int i = 0; i < 10; i++) {    executor.submit(() -> {        System.out.println("Thread " + Thread.currentThread().getName() + " is running");    });}
executor.shutdown();

复制代码

使用 ConcurrentHashMap

ConcurrentHashMap<String, String> concurrentMap = new ConcurrentHashMap<>();concurrentMap.put("A", "a");

复制代码

数据库优化

使用预编译 SQL 语句、批量操作和连接池等技巧可以提高数据库访问性能。以下是一个简单的预编译 SQL 例子

try (Connection connection = DriverManager.getConnection(url, user, password);     PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO my_table (name, age) VALUES (?, ?)")) {
    preparedStatement.setString(1, "John");    preparedStatement.setInt(2, 25);    preparedStatement.executeUpdate();
} catch (SQLException e) {    // 处理异常}

复制代码

使用性能调优工具

使用性能调优工具(如 JProfiler、VisualVM 等)对 Java 程序进行性能分析,找到性能瓶颈并进行优化。

下面介绍如何使用 VisualVM 进行性能调优

安装和启动 VisualVM

VisualVM 已经包含在了 JDK 的 bin 目录,如果你已经安装了 Java JDK,你可以在 bin 目录下找到jvisualvmvisualvm。在命令行中输入以下命令启动 VisualVM

jvisualvmvisualvm

复制代码

配置 VisualVM

在 VisualVM 中,可以通过安装插件扩展其功能。点击工具栏中的“Tools (工具)”菜单,然后选择“Plugins (插件)”,在“Available Plugins (可用插件)”选项卡中安装需要的插件。

监控 Java 应用

启动 VisualVM 后,在左侧的应用列表中可以看到当前正在运行的 Java 应用。选择一个应用,双击或者右键点击“Open (打开)”。

在打开的标签页中可以看到:

  • Overview(概览):显示 Java 应用的基本信息,如 JVM 版本、启动参数等。

  • Monitor(监控):实时显示 Java 应用的 CPU、内存、类加载、线程等信息。

  • Threads(线程):展示 Java 应用中所有线程的运行状态。

  • Sampler(取样器):对 Java 应用进行 CPU 和内存分析。

使用 VisualVM 进行性能分析

点击“Sampler”选项卡,可以对 Java 应用的 CPU 和内存进行性能分析。

  • CPU 分析:点击“CPU”选项下的“Start (开始)”,VisualVM 会监视应用的 CPU 使用情况。在分析结束后,点击“Stop (停止)”,VisualVM 将展示方法耗时信息,以及方法的调用树。通过这些信息,可以找到程序的性能瓶颈。

  • 内存分析:点击“Memory (内存)”选项下的“Start (开始)”,VisualVM 会监测应用的内存使用情况。点击“Stop (停止)”后,VisualVM 会展示各个类的内存占用信息。结合这些信息,可以分析内存泄漏、内存溢出等问题。

使用 VisualVM 分析堆转储文件(Heap Dump)

如果想要进一步分析应用的内存使用情况,可以创建堆转储文件。堆转储文件包含应用在某个时刻的内存快照。 若要创建堆转储文件,右键目标应用,选择“Heap Dump (堆转储)”。

打开堆转储文件后,可以看到 Java 应用中的对象、类实例、内存占用、引用关系等详细信息。结合这些信息可以帮助我们更深入地了解应用的内存使用情况,找到潜在的内存泄漏和优化点。

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-无-为-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值