首页 > 编程语言 >Java性能提升的其他技巧

Java性能提升的其他技巧

时间:2024-12-27 14:33:46浏览次数:4  
标签:异步 Java 技巧 Thread 性能 虚拟 线程 println

Java性能提升的其他技巧

虚拟线程

Java 19 引入的一种轻量级线程,即 虚拟线程(Virtual Thread),并在 Java 21 中正式 GA。

虚拟线程是 Java 21 引入的一个新特性,用于简化并发编程。它与传统的操作系统线程相比,具有显著的优势:

  1. 轻量级:虚拟线程由 JVM 管理,而非操作系统,因此它们的内存占用和创建成本远低于传统线程。理论上,你可以轻松创建数十万甚至更多的虚拟线程。
  2. 高并发性:虚拟线程能处理更高并发的场景,特别是 I/O 密集型的应用,适合开发高并发、响应式的应用程序。
  3. 自动管理:无需手动管理线程池,JVM 会根据负载自动调整虚拟线程的调度,简化了并发编程的复杂性。
//创建虚拟线程
Thread virtualThread = Thread.ofVirtual().start(() -> {    System.out.println("虚拟线程正在运行");});System.out.println("主线程正在运行");
//虚拟线程的延迟启动
Thread virtualThread = Thread.ofVirtual()    .name("虚拟线程")    .unstarted(() -> System.out.println("虚拟线程运行中"));
virtualThread.start();
// 等待虚拟线程完成
virtualThread.join(); 

Spring boot 3.x启动虚拟线程

application.properties或application.yml

# 启用 虚拟线程
spring.threads.virtual.enabled=true
# 启用性能监控工具
management.endpoints.web.exposure.include=health,info,metrics

除了虚拟线程,Java 还有一些其他的性能提升技巧,尤其适用于 Spring Boot 高并发场景:

并行流(Java 8 Stream流)

使用并行流:对于 CPU 密集型任务,可以使用并行流(parallelStream())来利用多核 CPU,提高处理速度。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);numbers.parallelStream().forEach(number -> {    System.out.println(number * 2);});

异步编程(Java 8 异步编程)

异步编程与CompletableFuture:对于 I/O 密集型任务,可以使用 CompletableFuture 进行异步处理,减少线程阻塞,提高响应性能。

CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {    // 异步执行任务    System.out.println("异步任务完成");});future.join();  // 等待任务完成

巧夺天工

优化数据库查询

优化数据库查询:减少数据库查询的次数,使用缓存(如 Redis)来存储频繁查询的数据,减少不必要的 I/O 操作。或性能利器Caffeine缓存

内存管理优化

内存管理优化:通过使用对象池(如 Apache Commons Pool)来管理资源,减少频繁的对象创建和销毁,提高内存使用效率。

Web容器

替换Spring Boot 内置Tomcat数据库为 采用 Undertow 基于 XNIO 的高性能容器

标签:异步,Java,技巧,Thread,性能,虚拟,线程,println
From: https://www.cnblogs.com/lehoso/p/18635671

相关文章

  • 别再夹灰了!这份Java架构六大专题面试宝典值得你好好刷一刷
    Java面试是一个老生常谈的问题。每年到了金三银四&金九银十这种跳槽黄金季就会有一大批程序员出来面试找工作。流程就是熟悉的网上开始找面试题,面试手册,面试宝典,一收藏就是一大把,看到什么都觉得Nice,看几眼之后就收藏夹吃灰,对面试其实起不到什么实际性帮助。但其实只要你不做收......
  • JAVA-Day 02:注释
    JAVA中的三种注释1.单行注释单行注释格式为"//语句",在语句前添加两个斜杠"//"即可,如下图所示;publicclassexegesispublicstaticvoidmain(String[]args){//输出一个"Hello,world!"System.out.print("Hello,World!");}注意:单行注释只能注释一条语句!2.多......
  • JAVA-PTA题目集总结3
    ​1.前言    经过这两次对家具强电电路模拟的迭代,我对JAVA编程语言有了更深入的理解,同时在程序开发设计环节也有了很大的进步,吸收了上次编程练习的教训后,我在本阶段的编程练习中也有针对性的进行了改进。        本次的JAVA练习内容丰富,包括各种数据结构的应用......
  • 免费送源码(计算机毕业设计原创定制):Java+CSS+springboot Springboot高校医务室管理系统
    摘 要科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作规则和开发步骤,采用java技术建设高校......
  • 免费送源码:Java+springboot+MySQL 房屋租赁系统小程序的设计与实现 计算机毕业设计原
    目 录摘要11绪论11.1选题意义11.2开发现状11.3springboot框架介绍11.4论文结构与章节安排12 房屋租赁系统小程序系统分析32.1可行性分析32.1.1技术可行性分析32.1.2经济可行性分析32.1.3法律可行性分析32.2系统功能分析32.2.1功能性分析......
  • 12.19 JAVA实战2019错题本系统(1)
    今天实战写一下建民老师发的2019年错题本系统。1.在IDE中创建一个Maven项目,项目的基本目录结构如下:src/main/java:用于存放Java源代码,包括Servlet、JavaBean等类。src/main/resources:放置配置文件,如数据库连接配置文件(.properties文件)等。src/main/webapp:Web相关资源......
  • Java 编程中 Bean、PO、POJO、VO、Entity、Model、DTO 术语全面解析对比
    术语描述特点用途BeanJava语言中可重用的组件,通常具有属性和对应的getter、setter方法等遵循JavaBean规范,具有一定的封装性和可访问性用于构建Java应用程序的各种组件,如在框架中作为配置信息的载体等PO持久化对象,通常与数据库中的表结构相对应与数据库表结构紧......
  • 12.20 java实战2019年错题本系统(2)
    今天继续2019年错题本系统的练习,昨天已经完成了除增删改查和页面设计的其他部分。1.新增请假申请Servlet(AddLeaveServlet)importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.h......
  • DP1363F是一款高度集成的非接触读写芯片,高性能、多协议NFC读卡IC
    DP1363F是一款高度集成的非接触读写芯片,集强大的多协议支持、最高射频输出功率,以及突破性技术低功耗卡片检测等优势于一身,满足市场对更高集成度、更小外壳和互操作性的需求,适用于银行、电子政务、交通、移动支付等众多基础设施应用。DP1363F支持下列操作模式:•读写模式支持ISO/......
  • 12.16博客 备战java14
    今天学习增删改查中的修改功能,这部分是期末考试必须拿到的分数建立数据库连接。构建UPDATE语句的PreparedStatement对象,其中有两个占位符,第一个用于设置要更新的年龄值,第二个用于指定要修改的记录的ID(通过WHERE子句来限定条件)。执行executeUpdate方法进行修改操作,同样......