为何对Java虚拟机(JVM)进行性能优化至关重要?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1583个文字,预计阅读时间需要7分钟。
摘要:JVM中拥有众多可配置参数,这使得JVM能在不同环境中高效运行。大部分参数保持默认即可。本文分享自华为云社区,探讨为什么需要对JVM进行优化。
正文:在JVM中,通过调整各种参数,可以使其在不同环境下都能高效运行。大多数参数默认设置已足够适用。以下内容来自华为云社区,讨论了优化JVM的必要性。
为什么需要对JVM进行优化?
1. 提高性能:通过优化JVM,可以提高应用程序的运行效率,减少资源消耗,从而提升整体性能。
2. 适应不同环境:不同环境对JVM的要求不同,优化JVM可以使其更好地适应各种场景,如高并发、大数据处理等。
3. 降低成本:优化JVM可以减少资源消耗,降低运维成本。
4. 提升用户体验:优化后的JVM可以提供更快的响应速度,提升用户体验。
优化JVM的方法:
1. 调整内存参数:合理配置堆内存、栈内存等,以适应应用程序的需求。
2. 调整垃圾回收器参数:选择合适的垃圾回收器,并调整其参数,以提高垃圾回收效率。
3. 调整编译器参数:调整即时编译器(JIT)的参数,以优化代码执行效率。
4. 调整线程参数:合理配置线程池大小、线程优先级等,以提高并发处理能力。
总结:优化JVM是提升应用程序性能、降低成本、适应不同环境的重要手段。通过调整JVM参数,可以使应用程序在各种环境下都能高效运行。
摘要:在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能够高效的运行。绝大部分的参数保持默认即可。
本文分享自华为云社区《为什么需要对jvm进行优化,jvm运行参数之标准参数》,作者:共饮一杯无。
我们为什么要对jvm做优化?
在本地开发环境中我们很少会遇到需要对jvm进行优化的需求,但是到了生产环境,我们可能将有下面的需求:
运行的应用“卡住了”,日志不输出,程序没有反应服务器的CPU负载突然升高
在多线程应用下,如何分配线程的数量?
……
说明:使用的jdk版本为1.8。
jvm的运行参数
在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能够高效的运行。绝大部分的参数保持默认即可。
三种参数类型
jvm的参数类型分为三类,分别是:
- 标准参数
-help-version
- -X参数(非标准参数,相对变化较少的)
-Xint-Xcomp
- -XX参数(使用率较高,JVM调优的主要部分)
-XX:newSize-XX:+UseSerialGC
标准参数
jvm的标准参数,一般都是很稳定的,在未来的JVM版本中不会改变,可以使用java -help检索出所有的标准参数。
C:\Users\zjq>java -help用法: java [-options] class [args...] (执行类) 或 java [-options] -jar jarfile [args...] (执行 jar 文件)其中选项包括: -d32 使用 32 位数据模型 (如果可用) -d64 使用 64 位数据模型 (如果可用) -server 选择 "server" VM 默认 VM 是 server. -cp <目录和 zip/jar 文件的类搜索路径> -classpath <目录和 zip/jar 文件的类搜索路径> 用 ; 分隔的目录, JAR 档案 和 ZIP 档案列表, 用于搜索类文件。 -D<名称>=<值> 设置系统属性 -verbose:[class|gc|jni] 启用详细输出 -version 输出产品版本并退出 -version:<值> 警告: 此功能已过时, 将在 未来发行版中删除。 需要指定的版本才能运行 -showversion 输出产品版本并继续 -jre-restrict-search | -no-jre-restrict-search 警告: 此功能已过时, 将在 未来发行版中删除。 在版本搜索中包括/排除用户专用 JRE -? -help 输出此帮助消息 -X 输出非标准选项的帮助 -ea[:<packagename>...|:<classname>] -enableassertions[:<packagename>...|:<classname>] 按指定的粒度启用断言 -da[:<packagename>...|:<classname>] -disableassertions[:<packagename>...|:<classname>] 禁用具有指定粒度的断言 -esa | -enablesystemassertions 启用系统断言 -dsa | -disablesystemassertions 禁用系统断言 -agentlib:<libname>[=<选项>] 加载本机代理库 <libname>, 例如 -agentlib:hprof 另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help -agentpath:<pathname>[=<选项>] 按完整路径名加载本机代理库 -javaagent:<jarpath>[=<选项>] 加载 Java 编程语言代理, 请参阅 java.lang.instrument -splash:<imagepath> 使用指定的图像显示启动屏幕有关详细信息, 请参阅 www.oracle.com/technetwork/java/javase/documentation/index.html。实战
实战1:查看jvm版本
C:\Users\zjq>java -versionjava version "1.8.0_171"Java(TM) SE Runtime Environment (build 1.8.0_171-b11)Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)实战2:通过**-D**设置系统属性参数
public class TestJVM { public static void main(String[] args) { String str = System.getProperty("str"); if(str == null){ System.out.println("zjqzjq"); }else{ System.out.println(str); } System.gc(); }}进行编译、测试:
E:\jvm>javac TestJVM.javaE:\jvm>java TestJVMzjqzjqE:\jvm>java -Dstr=hello-D TestJVMhello-D-server与-client参数
可以通过-server或-client设置jvm的运行参数。
它们的区别是Server VM的初始堆空间会大一些,默认使用的是并行垃圾回收器,启动慢运行快。
- Client VM相对来讲会保守一些,初始堆空间会小一些,使用串行的垃圾回收器,它的目标是为了让JVM的启动速度更快,但运行速度会比Serverm模式慢些。
- JVM在启动的时候会根据硬件和操作系统自动选择使用Server还是Client类型的JVM。
- 32位操作系统
如果是Windows系统,不论硬件配置如何,都默认使用Client类型的JVM。如果是其他操作系统上,机器配置有2GB以上的内存同时有2个以上CPU的话默认使用server模式,否则使用client模式。
- 64位操作系统
只有server类型,不支持client类型。
测试:
E:\jvm>java -client -showversion TestJVMjava version "1.8.0_171"Java(TM) SE Runtime Environment (build 1.8.0_171-b11)Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)zjqzjqE:\jvm>java -server -showversion TestJVMjava version "1.8.0_171"Java(TM) SE Runtime Environment (build 1.8.0_171-b11)Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)zjqzjq#由于机器是64位系统,所以不支持client模式点击关注,第一时间了解华为云新鲜技术~
本文共计1583个文字,预计阅读时间需要7分钟。
摘要:JVM中拥有众多可配置参数,这使得JVM能在不同环境中高效运行。大部分参数保持默认即可。本文分享自华为云社区,探讨为什么需要对JVM进行优化。
正文:在JVM中,通过调整各种参数,可以使其在不同环境下都能高效运行。大多数参数默认设置已足够适用。以下内容来自华为云社区,讨论了优化JVM的必要性。
为什么需要对JVM进行优化?
1. 提高性能:通过优化JVM,可以提高应用程序的运行效率,减少资源消耗,从而提升整体性能。
2. 适应不同环境:不同环境对JVM的要求不同,优化JVM可以使其更好地适应各种场景,如高并发、大数据处理等。
3. 降低成本:优化JVM可以减少资源消耗,降低运维成本。
4. 提升用户体验:优化后的JVM可以提供更快的响应速度,提升用户体验。
优化JVM的方法:
1. 调整内存参数:合理配置堆内存、栈内存等,以适应应用程序的需求。
2. 调整垃圾回收器参数:选择合适的垃圾回收器,并调整其参数,以提高垃圾回收效率。
3. 调整编译器参数:调整即时编译器(JIT)的参数,以优化代码执行效率。
4. 调整线程参数:合理配置线程池大小、线程优先级等,以提高并发处理能力。
总结:优化JVM是提升应用程序性能、降低成本、适应不同环境的重要手段。通过调整JVM参数,可以使应用程序在各种环境下都能高效运行。
摘要:在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能够高效的运行。绝大部分的参数保持默认即可。
本文分享自华为云社区《为什么需要对jvm进行优化,jvm运行参数之标准参数》,作者:共饮一杯无。
我们为什么要对jvm做优化?
在本地开发环境中我们很少会遇到需要对jvm进行优化的需求,但是到了生产环境,我们可能将有下面的需求:
运行的应用“卡住了”,日志不输出,程序没有反应服务器的CPU负载突然升高
在多线程应用下,如何分配线程的数量?
……
说明:使用的jdk版本为1.8。
jvm的运行参数
在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能够高效的运行。绝大部分的参数保持默认即可。
三种参数类型
jvm的参数类型分为三类,分别是:
- 标准参数
-help-version
- -X参数(非标准参数,相对变化较少的)
-Xint-Xcomp
- -XX参数(使用率较高,JVM调优的主要部分)
-XX:newSize-XX:+UseSerialGC
标准参数
jvm的标准参数,一般都是很稳定的,在未来的JVM版本中不会改变,可以使用java -help检索出所有的标准参数。
C:\Users\zjq>java -help用法: java [-options] class [args...] (执行类) 或 java [-options] -jar jarfile [args...] (执行 jar 文件)其中选项包括: -d32 使用 32 位数据模型 (如果可用) -d64 使用 64 位数据模型 (如果可用) -server 选择 "server" VM 默认 VM 是 server. -cp <目录和 zip/jar 文件的类搜索路径> -classpath <目录和 zip/jar 文件的类搜索路径> 用 ; 分隔的目录, JAR 档案 和 ZIP 档案列表, 用于搜索类文件。 -D<名称>=<值> 设置系统属性 -verbose:[class|gc|jni] 启用详细输出 -version 输出产品版本并退出 -version:<值> 警告: 此功能已过时, 将在 未来发行版中删除。 需要指定的版本才能运行 -showversion 输出产品版本并继续 -jre-restrict-search | -no-jre-restrict-search 警告: 此功能已过时, 将在 未来发行版中删除。 在版本搜索中包括/排除用户专用 JRE -? -help 输出此帮助消息 -X 输出非标准选项的帮助 -ea[:<packagename>...|:<classname>] -enableassertions[:<packagename>...|:<classname>] 按指定的粒度启用断言 -da[:<packagename>...|:<classname>] -disableassertions[:<packagename>...|:<classname>] 禁用具有指定粒度的断言 -esa | -enablesystemassertions 启用系统断言 -dsa | -disablesystemassertions 禁用系统断言 -agentlib:<libname>[=<选项>] 加载本机代理库 <libname>, 例如 -agentlib:hprof 另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help -agentpath:<pathname>[=<选项>] 按完整路径名加载本机代理库 -javaagent:<jarpath>[=<选项>] 加载 Java 编程语言代理, 请参阅 java.lang.instrument -splash:<imagepath> 使用指定的图像显示启动屏幕有关详细信息, 请参阅 www.oracle.com/technetwork/java/javase/documentation/index.html。实战
实战1:查看jvm版本
C:\Users\zjq>java -versionjava version "1.8.0_171"Java(TM) SE Runtime Environment (build 1.8.0_171-b11)Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)实战2:通过**-D**设置系统属性参数
public class TestJVM { public static void main(String[] args) { String str = System.getProperty("str"); if(str == null){ System.out.println("zjqzjq"); }else{ System.out.println(str); } System.gc(); }}进行编译、测试:
E:\jvm>javac TestJVM.javaE:\jvm>java TestJVMzjqzjqE:\jvm>java -Dstr=hello-D TestJVMhello-D-server与-client参数
可以通过-server或-client设置jvm的运行参数。
它们的区别是Server VM的初始堆空间会大一些,默认使用的是并行垃圾回收器,启动慢运行快。
- Client VM相对来讲会保守一些,初始堆空间会小一些,使用串行的垃圾回收器,它的目标是为了让JVM的启动速度更快,但运行速度会比Serverm模式慢些。
- JVM在启动的时候会根据硬件和操作系统自动选择使用Server还是Client类型的JVM。
- 32位操作系统
如果是Windows系统,不论硬件配置如何,都默认使用Client类型的JVM。如果是其他操作系统上,机器配置有2GB以上的内存同时有2个以上CPU的话默认使用server模式,否则使用client模式。
- 64位操作系统
只有server类型,不支持client类型。
测试:
E:\jvm>java -client -showversion TestJVMjava version "1.8.0_171"Java(TM) SE Runtime Environment (build 1.8.0_171-b11)Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)zjqzjqE:\jvm>java -server -showversion TestJVMjava version "1.8.0_171"Java(TM) SE Runtime Environment (build 1.8.0_171-b11)Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)zjqzjq#由于机器是64位系统,所以不支持client模式点击关注,第一时间了解华为云新鲜技术~

