」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Java效能優化技術

Java效能優化技術

發佈於2024-11-08
瀏覽:890

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 中使用 ElementTree 的「find」和「findall」方法時如何忽略 XML 命名空間?
    在 Python 中使用 ElementTree 的「find」和「findall」方法時如何忽略 XML 命名空間?
    在ElementTree 的“find”和“findall”方法中忽略XML 命名空間使用ElementTree 模組解析和定位XML 文件中的元素時,命名空間會帶來複雜性。以下介紹如何在 Python 中使用「find」和「findall」方法時忽略命名空間。 當 XML 文件包含命名空間時,會導...
    程式設計 發佈於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
  • 如何使用 HTML ruby​​ 元素在 HTML 中增強文字註釋
    如何使用 HTML ruby​​ 元素在 HTML 中增強文字註釋
    在本教程中,我們將探索如何有效地使用 HTML 元素來建立增強的文字註解。 HTML5 中的 元素旨在顯示 ruby​​ 註釋,這是東亞排版中常用的小文字元件。這些註釋通常用於提供發音指南或附加資訊。 元素對於需要在正文旁邊或上方進行詳細註釋的文檔至關重要,這使其在教育內容、語言學習資源和某...
    程式設計 發佈於2024-11-08
  • 如何使用 RequestAnimationFrame 來穩定動畫的幀速率 (FPS)?
    如何使用 RequestAnimationFrame 來穩定動畫的幀速率 (FPS)?
    RequestAnimationFrame Fps 穩定RequestAnimationFrame (rAF) 已在動畫中變得流行,可提供流暢且高效的執行。然而,控制幀速率 (FPS) 以確保一致性可能具有挑戰性。 將 rAF 限制為特定 FPS要將 rAF 限制為特定 FPS,您可以自上一幀執行以...
    程式設計 發佈於2024-11-08
  • 如何實作跨域JavaScript的JSONP回呼?
    如何實作跨域JavaScript的JSONP回呼?
    跨域JavaScript的JSONP回調實現為了方便不同域之間的通信,引入了JSONP(JSON with Padding)。此技術涉及建立一個回調函數,該函數可用於包裝 JSON 資料並使其可以從不同的網域進行存取。以下是如何在PHP 中實作JSONP:接受回呼參數首先,在GET 請求中,我們接受...
    程式設計 發佈於2024-11-08
  • 每週部落格:本週我遇到的四件有趣的事情
    每週部落格:本週我遇到的四件有趣的事情
    1. 避免 VS Code 中檔案名稱混淆 在VS Code中編寫C檔案時,我將一個檔案命名為first.c.cpp。完成程式後,我在執行過程中遇到了錯誤。經過30分鐘的檢查,我發現問題出在檔名: .c 副檔名導致 IDE 錯誤地將其識別為 C 程序,導致 VS Code 使用 g...
    程式設計 發佈於2024-11-08
  • Python正規表示式中「\d」和「[0-9]」有什麼不同?
    Python正規表示式中「\d」和「[0-9]」有什麼不同?
    [字元]:正規表示式中的\dPython風格正規表示式中的「\d」字元類別用於匹配數字。數字通常定義為數字字元 (0-9)。然而,值得注意的是,「\d」的行為可能會根據程式語言和實現的不同而有所不同。 對於Python,「\d」符合滿足Unicode 的\p{Nd} 的字元屬性,其中包括以下內容:[...
    程式設計 發佈於2024-11-08
  • 如何在 Golang 中寫入 Bytes.Buffer 的開頭?
    如何在 Golang 中寫入 Bytes.Buffer 的開頭?
    Golang 中的前綴緩衝區寫入在Golang 中,bytes.Buffer 是一種為高效字串連接和操作而設計的類型。然而,一些開發人員可能會遇到寫入緩衝區開頭的需要,這與僅附加到緩衝區的內建幫助器方法(例如 WriteString)不同。 寫入緩衝區開頭雖然 bytes.Buffer 的底層 bu...
    程式設計 發佈於2024-11-08
  • 在 Laravel 中為本機檔案建立臨時 URL
    在 Laravel 中為本機檔案建立臨時 URL
    在 Laravel 處理私人檔案通常意味著涉及 S3 或 DigitalOcean 等第三方服務。但是如果您在本地開發環境中或有一個輕量級專案怎麼辦?您可能不想依賴第三方雲端服務。 幸運的是,Laravel 可以輕鬆地為本地儲存的文件提供臨時 URL。這種方法可以加快開發速度並簡化文件共享。 您...
    程式設計 發佈於2024-11-08
  • 了解如何建立 API 支援的 Zelda BOTW 怪物畫廊 Web 元件
    了解如何建立 API 支援的 Zelda BOTW 怪物畫廊 Web 元件
    模数教程回来了! 大家好!暑假结束后,我带着 Modulo 教程回来了。我正在制作更多教程 - 请继续关注。也就是说,如果您对我的下一个主题有任何具体想法,请务必在评论中告诉我! 我的上一篇教程是关于 API 驱动的 Pokémon Dance Party 组件的超级快速且有趣的“...
    程式設計 發佈於2024-11-08
  • 如何將 jQuery 函數套用到具有相同 ID 的多個元素?
    如何將 jQuery 函數套用到具有相同 ID 的多個元素?
    使用 jQuery 存取具有相同 ID 的元素在 HTML 中,每個元素都應該有一個唯一的 ID。但是,在某些情況下,您可能需要將 jQuery 函數套用到具有相同 ID 的多個元素。在本文中,我們將探討如何處理這種情況。 根據提供的程式碼片段,jQuery 的 jcarousel() 函數僅應用於...
    程式設計 發佈於2024-11-08
  • 查找包和 CLASSPATH
    查找包和 CLASSPATH
    依目錄鏡像包: Java 套件對應到檔案系統上的目錄。 Java在運行時尋找套件的三種方式: 目前工作目錄:運行時系統使用工作目錄作為起點。如果包在目前目錄的子目錄中,則會找到它。 CLASSPATH 變數:您可以設定 CLASSPATH 環境變數以包含套件路徑。 -classpath選項:在...
    程式設計 發佈於2024-11-08
  • PHP 中的 PATH_INFO 是什麼?
    PHP 中的 PATH_INFO 是什麼?
    PHP 中的 PATH_INFO:揭開神秘面紗PATH_INFO 變數已在各種上下文中遇到過,但其真正本質仍然難以捉摸。為了清楚了解 PATH_INFO,我們必須深入研究它的起源。 Apache Web Server 和 PATH_INFOPATH_INFO 不只是一個 PHP 概念,而且與Apac...
    程式設計 發佈於2024-11-08
  • javaScript 中的方法重載
    javaScript 中的方法重載
    JavaScript 不直接支援方法重載(如 Java 或 C# 等語言),因為函數只能有一個定義。然而,JavaScript 是動態的,允許我們使用以下技術來模擬重載: 檢查參數數量或類型。 使用預設參數。 使用參數或剩餘參數。 以下是一些實作重載行為的方法。 1. 使用參...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3