文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

面向Java开发人员的JVM参数指南

2024-12-02 03:08

关注

当你编写源代码时,你是在编写供人类阅读的代码。在代码被编译成机器语言之前,计算机不能执行源代码。机器语言是一个通用术语,指的是特定机器所需的任意数量的语言。通常,如果在Linux上编译代码,它就在Linux上运行,如果在Windows上编译代码,它就在Windows上运行,以此类推。然而,Java是不同的。它并不以某种真正的机器为目标。它的目标是Java虚拟机(JVM),因此它可以在任何机器上运行。

Java源代码被编译成字节码,由安装在计算机上的JVM运行。JVM是一个执行引擎,但它不是一个你通常直接与之交互的引擎。它安静地运行,处理Java字节码。大多数人不需要考虑甚至不需要了解JVM,但是了解JVM的工作原理对调试和优化Java代码是很有用的。例如:

本文介绍了一些基本的JVM参数,希望可以在这些场景中提供帮助……

JVM、JDK和JRE之间的区别是什么?

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

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实现都支持标准参数。在终端中运行'java'命令查看标准参数列表。

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

这些都是包含在任意JVM中的标准参数,你可以在使用任何命令行选项时安全地使用它们。例如,为了验证配置的命令参数,创建一个VM并在不执行主类的情况下加载一个主类,使用以下命令:

$ java --dry-run  

非标准参数

非标准参数以-X开头。它们用于通用用途,并且特定于JVM的特定实现。列出这些选项:

$ java -X  
-Xbatch disable background compilation  
-Xbootclasspath/a:  
append to end of bootstrap class path  
-Xinternalversion  
displays more detailed JVM version information than the  
-version option  
-Xloggc: 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内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯