”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Java性能优化技术

Java性能优化技术

发布于2024-11-08
浏览:183

Java Performance Optimization Techniques

你好 ?
您可以找到有关 Java 性能优化技术

的完整文章

1. 概述

优化您的代码性能对于您的个人资料的成功至关重要。您是否知道 Akamai 的研究发现,如果页面加载时间超过 3 秒,57% 的在线消费者就会放弃网站?在这篇文章中,您将学习如何优化 Java 代码并提高代码性能。

2. 虚拟线程

不再说 OutOfMemoryError: 无法创建新的本机线程错误。

Java 19 中引入的 Java 虚拟线程可以显着提高项目的性能。

在 Java 的早期版本中,只有 1 种类型的线程(经典线程),当创建经典线程时,会分配操作系统线程,并且线程数量仅限于操作系统线程。

从 JDK 19 开始,您可以创建比操作系统线程轻得多的虚拟线程,并且您可以在应用程序中创建和运行数千个虚拟线程。

要在 Spring Boot 应用程序中启用虚拟线程,请将以下代码添加到您的 application.properties 中。

spring.threads.virtual.enabled=true

3. 延迟加载

许多性能问题都是由于获取不需要的数据而引起的。

最佳实践是仅在需要时加载对象。

例如,您可以在 Hibernate 中使用 FetchLazy,但请始终记住,适当的获取策略取决于您正在处理的特定用例。

fetch = FetchType.LAZY

4、缓存

通过缓存经常访问的数据来最小化磁盘访问。通过使用适当的缓存技术,您可以减少延迟、避免网络拥塞并提高内容可用性。

Spring框架提供对各种缓存提供程序的支持,包括但不限于Redis、Caffeie、Cache2k等...

5.避免GenerationType.TABLE

在 JPA 中选择密钥生成策略时,选择最适合您正在使用的数据库的策略非常重要。
GenerationType.TABLE

避免使用 GenerationType.TABLE 的性能开销。每次需要主键时,都会执行 LOCK 语句,以及对序列表进行选择和更新。
GenerationType.IDENTITY

GenerationType.IDENTITY 最适合 MySQL,因为 MySQL 使用自动增量字段,而 GenerationType.IDENTITY 可以很好地配合它。
GenerationType.SEQUENCE

GenerationType.SEQUENCE 通常与 PostgreSQL 和 Oracle 一起使用。两个数据库都支持序列,序列是生成唯一数字序列的数据库对象。

6. 查询计划缓存

Hibernate 的查询计划缓存是一个可以提高应用程序性能的关键功能。

当hibernate执行JPQL查询时,需要生成相应的SQL查询。此过程涉及将查询解析为抽象语法树,将树转换为 SQL 查询,最后将结果映射回 Java 对象。

此过程完成后,hibernate 会缓存该过程,以便不需要对同一查询再次执行这些步骤。

要启用和配置查询计划缓存,请使用以下代码:

hibernate.query.plan_cache_max_size=2048 # 缓存中查询计划的最大数量
hibernate.query.plan_parameter_metadata_max_size=128 # 带有参数元数据的查询计划的最大大小

七、结论

优化 Java 代码性能对于交付快速且响应迅速的应用程序至关重要。

通过利用虚拟线程等现代功能、实现延迟加载、使用高效的缓存策略以及优化数据库操作,您可以显着提高应用程序的性能。

版本声明 本文转载于:https://dev.to/mohamed_kramti/java-performance-optimization-techniques-45d1?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 比较 Python 和 ArkScript 异步模型
    比较 Python 和 ArkScript 异步模型
    Python 最近受到了很多关注。计划于今年 10 月发布的 3.13 版本将开始删除 GIL 的艰巨工作。对于想要尝试(几乎)无 GIL Python 的好奇用户来说,预发行版已经发布。 所有这些炒作让我用我自己的语言 ArkScript 进行挖掘,因为我过去也有一个全局 VM 锁(在 2020 ...
    编程 发布于2024-11-08
  • 顶级 VS Code 扩展成为 JavaScript 向导
    顶级 VS Code 扩展成为 JavaScript 向导
    Writing code is hard. As a JavaScript developer, you’ve probably felt the pressure of juggling multiple tasks — writing clean code, debugging tricky i...
    编程 发布于2024-11-08
  • 如何计算 Python 中 ndarray 的出现次数?
    如何计算 Python 中 ndarray 的出现次数?
    计数 ndarray 中的出现次数在 numpy 中,尝试执行以下操作时可能会遇到错误“numpy.ndarray 对象没有属性计数”使用 .count() 方法来计算数组中特定值的出现次数。使用 numpy.unique对此的解决方案是使用 numpy.unique ()。该函数识别数组中的唯一值...
    编程 发布于2024-11-08
  • 似乎没有人谈论的一件事
    似乎没有人谈论的一件事
    我认为我们大多数软件开发人员发生的第一件事导致我们失去希望,那就是我们被迫走捷径。 我们基本上被告知你必须在一定的期限内完成。 我们开始做一些工作,当我们接近最后期限时,我们不可避免地意识到这将花费我们比我们想象的更长的时间。 如果您一直在编程或进行软件开发。 无论您是从事运维、用户体验还是任何与软...
    编程 发布于2024-11-08
  • 如何在 PHP 中从数组生成查询字符串?
    如何在 PHP 中从数组生成查询字符串?
    在 PHP 中从数组创建查询字符串PHP 框架提供了专门为从数组构建查询字符串而设计的多功能函数:http_build_query()。该函数的主要目的是将键值对数组转换为标准 URL 编码的查询字符串。使用 http_build_query()http_build_query( 的语法)如下:st...
    编程 发布于2024-11-08
  • JavaScript 中基本对象和函数链接的原则是什么?
    JavaScript 中基本对象和函数链接的原则是什么?
    了解 JavaScript 中的基本对象/函数链函数链是一种编程技术,允许开发人员创建按特定顺序执行的操作序列。在 JavaScript 中,这是通过返回函数本身和使用 this 关键字相结合来实现的。要了解链接的原理,让我们看一个工作示例:var one = function(num) { ...
    编程 发布于2024-11-08
  • 开发工具不是必需的
    开发工具不是必需的
    几个月前我正在开发一个前端项目。该项目是一个微前端,旨在集成到遗留仪表板上。 采用微前端方法的原因是为了降低仪表板上的复杂性。我对这个挑战感到兴奋并投入其中。 我使用 webpack、react 和 typescript 设置微前端。我使用 chakra ui 作为 CSS-IN-JS 框架,使用...
    编程 发布于2024-11-08
  • OpenAI 在简化代码方面出奇地好
    OpenAI 在简化代码方面出奇地好
    While browsing the Internet for inspiration, I came across an interesting-looking component. I thought the block with the running ASCII art looked coo...
    编程 发布于2024-11-08
  • 与工人一起部署
    与工人一起部署
    按钮发生器 按钮生成器是一款旨在简化 GitHub 上托管项目的部署过程的工具。通过创建“部署到 Cloudflare Workers”按钮,您可以简化部署过程,让用户只需单击一下即可将您的应用程序部署到 Cloudflare Workers。 此按钮为用户提供了一种将项目直接部署...
    编程 发布于2024-11-08
  • 使用 PHP 操作字符串
    使用 PHP 操作字符串
    字符串是编程中用于表示字符序列的数据类型。这些字符可以是字母、数字、空格、符号等。在许多编程语言中,字符串用单引号 (') 或双引号 (") 括起来。 字符串连接 连接是将两个或多个字符串连接在一起的过程。 <?php $name = "John"; $lastname = ...
    编程 发布于2024-11-08
  • jQuery 可以帮助使用 Comet 模式进行服务器发送消息吗?
    jQuery 可以帮助使用 Comet 模式进行服务器发送消息吗?
    利用 Comet 通过 jQuery 进行服务器发送消息传递在 JavaScript 编程领域,服务器推送功能已经获得了突出地位,彗星设计模式正在成为一种流行的方法。本文探讨了构建在著名 jQuery 库之上的此类解决方案的可用性。基于 jQuery 的 Comet 实现尽管 Comet 模式很流行...
    编程 发布于2024-11-08
  • 如何在 Keras 中实现 Dice 误差系数的自定义损失函数?
    如何在 Keras 中实现 Dice 误差系数的自定义损失函数?
    Keras 中的自定义损失函数:实现 Dice 误差系数在本文中,我们将探讨如何创建自定义损失函数在 Keras 中,重点关注 Dice 误差系数。我们将学习实现参数化系数并将其包装以与 Keras 的要求兼容。实现系数我们的自定义损失函数将需要系数和一个包装函数。该系数测量 Dice 误差,该误差...
    编程 发布于2024-11-08
  • 为什么 MySQL 会抛出“警告:mysql_fetch_assoc 参数无效”错误?
    为什么 MySQL 会抛出“警告:mysql_fetch_assoc 参数无效”错误?
    MySQL 警告:mysql_fetch_assoc 的参数无效问题:尝试从 MySQL 检索数据时数据库时,遇到以下错误消息:mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource说明:mysql_fe...
    编程 发布于2024-11-08
  • 为什么在 Node.js 应用程序中连接到 MySQL 时出现“connect ECONNREFUSED”错误?
    为什么在 Node.js 应用程序中连接到 MySQL 时出现“connect ECONNREFUSED”错误?
    Node.js MySQL:解决“connect ECONNREFUSED”错误将 Node.js 应用程序部署到远程服务器时,您可以尝试建立与 MySQL 数据库的连接时遇到“connect ECONNREFUSED”错误。当 MySQL 连接参数中提供的主机配置不正确时,通常会出现此问题。在您的...
    编程 发布于2024-11-08
  • 用 Go 构建密码管理器
    用 Go 构建密码管理器
    作为一名软件开发人员,我一直对安全性和可用性的交集着迷。最近,我决定开始一个令人兴奋的项目:使用 Go 创建一个命令行密码管理器。我想与您分享这段旅程的开始,从第一次提交开始。 创世记 2023 年 11 月 27 日,我对我的项目进行了初步提交,我将其命名为“dost”(印地语中的...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3