成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面向Java開發人員的JVM參數指南

譯文 精選
開發
通過理解和使用JVM和JVM參數,開發人員和最終用戶都可以診斷故障并改進Java應用程序的性能。

通過理解和使用JVM和JVM參數,開發人員和最終用戶都可以診斷故障并改進Java應用程序的性能。

當你編寫源代碼時,你是在編寫供人類閱讀的代碼。在代碼被編譯成機器語言之前,計算機不能執行源代碼。機器語言是一個通用術語,指的是特定機器所需的任意數量的語言。通常,如果在Linux上編譯代碼,它就在Linux上運行,如果在Windows上編譯代碼,它就在Windows上運行,以此類推。然而,Java是不同的。它并不以某種真正的機器為目標。它的目標是Java虛擬機(JVM),因此它可以在任何機器上運行。

Java源代碼被編譯成字節碼,由安裝在計算機上的JVM運行。JVM是一個執行引擎,但它不是一個你通常直接與之交互的引擎。它安靜地運行,處理Java字節碼。大多數人不需要考慮甚至不需要了解JVM,但是了解JVM的工作原理對調試和優化Java代碼是很有用的。例如:

  • 生產環境中,你可能會發現已部署的應用程序需要性能提升。
  • 如果編寫的應用程序出現問題,開發人員和最終用戶都可以選擇調試該問題。
  • 你是否希望了解用于開發或運行Java應用程序的Java開發工具包(JDK)的詳細信息,可以通過查詢JVM獲得這些詳細信息

本文介紹了一些基本的JVM參數,希望可以在這些場景中提供幫助……

JVM、JDK和JRE之間的區別是什么?

Java有很多J首字母縮略詞,包括JVM、JDK和JRE。

  • Java開發者工具包(JDK)可供需要在代碼中使用開發庫的程序員使用。
  • Java運行時環境(JRE)是由想要運行Java應用程序的人所使用的。
  • Java虛擬機(JVM)是運行Java字節碼的組件。

JDK包含JRE和JVM,但是一些Java發行版提供了包含JRE(包括JVM)的替代下載。

Java是開源的,所以會有不同的公司構建和發行不同版本的JDK。你可以在系統上安裝多個JDK,當你正在處理或使用不同的Java項目(其中一些可能使用舊的JDK)時,這會很有幫助。

要列出Linux系統上的JDK,你可以使用alternatives命令:

$ alternatives --config java  
There are 2 programs that provide java.  
Selection Command  
-----------------------------------------------  
*+ 1 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-2.fc35.x86_64/bin/java)  
2 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.fc35.x86_64/jre/bin/java)  
Enter to keep the current selection[+], or type selection number: 

要在可用的JDK之間切換,請再次執行以下命令:

$ sudo alternatives --config java 

另一個選擇是使用SDKMan,它可以幫助你下載、更新和管理系統上的JDK。

什么是JVM調優?

JVM調優是調整JVM參數以提高Java應用程序性能的過程。它還有助于診斷應用程序故障。

一般來說,在調優之前考慮這些要點是很重要的:

  • 成本:有時候,改進運行代碼的硬件可以提高應用程序的性能。這似乎是一種“欺騙”,但請考慮你愿意花多少時間來調優JVM參數。有時,應用程序需要更多的內存來執行所需的操作,任何軟件優化都無法改變這一點。
  • 預期結果:長期來看,穩定比性能更重要。如果調優影響穩定性,那么明智地選擇調優參數可能會更好。
  • 底層問題:有時,問題可能是主機操作系統的底層問題。在調優JVM之前,請確保JVM的平臺按預期工作。
  • 內存泄漏:如果你發現自己在使用垃圾收集(GC)調優參數,那么可能存在需要在應用程序代碼中修復的內存泄漏。

JVM參數類型

JVM參數分為三類:標準參數、非標準參數和高級選項。

標準參數

所有JVM實現都支持標準參數。在終端中運行'java'命令查看標準參數列表。

$ java  
Usage: java [options] <mainclass> [args...]  
To specify an argument for a long option, you can use --<name>=<value> or  
--<name> <value>.  

這些都是包含在任意JVM中的標準參數,你可以在使用任何命令行選項時安全地使用它們。例如,為了驗證配置的命令參數,創建一個VM并在不執行主類的情況下加載一個主類,使用以下命令:

$ java --dry-run <classfile> 

非標準參數

非標準參數以-X開頭。它們用于通用用途,并且特定于JVM的特定實現。列出這些選項:

$ java -X  
-Xbatch disable background compilation  
-Xbootclasspath/a:<directories and zip/jar files separated by :>  
append to end of bootstrap class path  
-Xinternalversion  
displays more detailed JVM version information than the  
-version option  
-Xloggc:<file> log GC status to a file with time stamps  
[...] 

這些額外的參數可以在沒有通知的情況下更改,并且不是所有的JVM實現都支持這些參數。由Microsoft構建的JVM可能與由Red Hat構建的JVM有不同的參數,等等。

要獲取詳細的JVM版本信息,請使用以下命令:

$ java -Xinternalversion --version  
OpenJDK 64-Bit Server VM (11.0.13+8) for linux-amd64 JRE (11.0.13+8), built on Nov 8 2021 00:00:00 by "mockbuild" with gcc 11.2.1 20210728 (Red Hat 11.2.1-1)  

要獲取屬性設置,請使用:

 java -XshowSettings:properties --version

高級選項

這些選項不是臨時使用的,而是用于調整Hotspot VM的特定區域。這些參數可能會發生變化,并且不能保證所有JVM實現都會支持它。

這些參數以-XX開頭。要列出這些參數,請使用以下命令:

$ java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version

例如,要跟蹤類的加載,可以使用下面的命令:

$ java -XX:+TraceClassLoading Hello

Hello.java如下:

$ cat Hello. java  
public class Hello {  

你可能面臨的另一個常見問題是OOM(內存不足)錯誤,這可能在沒有太多調試信息的情況下發生。要解決這樣的問題,你可以使用調試選項                                            -XX:+HeapDumpOnOutOfMemoryError,它會創建一個包含調試信息的.hprof文件。

$ cat TestClass. java  
import java.util.ArrayList;  
import java.util.List;  
public class TestClass {  
}  
$ Javac TestClass.java  
$ java -XX:+HeapDumpOnOutOfMemoryError -Xms10m -Xmx1g TestClass  
java.lang.OutOfMemoryError: java heap space  
Dumping heap to java_pid444496.hprof ...  
Heap dump file created [1018925828 bytes in 1.442 secs]  
Exception in thread "main" java.lang.OutOfMemoryError: java heap space  
at TestClass.main(TestClass.Java:8)

有一些工具可以查看這個.hprof文件,以了解哪里出了問題。

結語

通過理解和使用JVM和JVM參數,開發人員和最終用戶都可以診斷故障并改進Java應用程序的性能。下次使用Java時,可以花些時間看看可供選擇的選項。

譯者介紹

盧鑫旺,51CTO社區編輯,半路出家的九零后程序員。做過前端頁面,寫過業務接口,搞過爬蟲,研究過JS,有幸接觸Golang,參與微服務架構轉型。目前主寫Java,負責公司可定制化低代碼平臺的數據引擎層設計開發工作。

原文標題:??A guide to JVM parameters for Java developers??,作者:Jayashree Huttanagoudar

責任編輯:莫奇 來源: 51CTO
相關推薦

2022-06-06 10:30:23

容器鏡像

2009-08-27 12:00:40

ibmdwJava

2024-02-21 08:00:00

機器學習Java大語言模型

2025-06-06 08:36:21

2019-07-22 08:00:00

JavaGitHub編程語言

2022-11-02 14:43:29

2025-02-08 11:02:57

2022-05-16 13:58:52

開發區塊鏈Web3

2023-03-02 17:44:30

DevOps開發

2020-05-11 09:54:33

JavaScript開發技術

2018-04-09 09:00:00

Java測試框架庫JUnit

2021-10-27 10:43:24

開發技能代碼

2024-12-12 08:00:00

2019-08-27 14:21:44

Python 開發程序員

2015-02-10 09:24:04

Web開發JavaScript工具

2016-10-18 10:45:00

開發開源

2021-12-10 23:48:19

Java開發技術

2022-06-26 07:08:25

Java IDE開發

2013-09-25 09:20:39

iOS開發iOS7iPhone5s

2018-11-26 09:55:07

MySQL誤刪數據數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 三级免费 | 在线一区 | 免费激情网站 | 亚洲精品日本 | 成人网在线观看 | 日韩在线不卡视频 | 成人免费在线播放 | 成人伊人 | 中文字幕国产 | av网站免费 | 日本特黄a级高清免费大片 特黄色一级毛片 | 日本成人片在线观看 | 色综合久 | 在线国产一区 | 91视视频在线观看入口直接观看 | 欧美一级大片免费看 | 国产99久久精品一区二区永久免费 | 成年人在线观看 | a在线观看 | 毛片一区二区三区 | 国产激情偷乱视频一区二区三区 | 国产成人久久精品一区二区三区 | 在线观看黄视频 | 伦理午夜电影免费观看 | 91精品国产91久久久久久最新 | 毛片一级网站 | 国产精品久久 | 欧美日韩在线成人 | 中文字幕在线视频观看 | 国产www在线 | 国产在线观 | www.久| 国产精品伦一区二区三级视频 | 蜜桃在线播放 | 羞羞色网站 | 男人天堂网av | 国产欧美精品在线 | 亚洲国产精品一区 | 国精产品一区一区三区免费完 | 国产精品美女一区二区三区 | 中文字幕免费在线 |