首页IT科技jvm为什么要分代管理(为啥要对jvm做优化?)

jvm为什么要分代管理(为啥要对jvm做优化?)

时间2025-05-05 00:41:30分类IT科技浏览4167
导读:摘要:在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

检索出所有的标准参数       。

实战

实战1:查看jvm版本

C:\Users\zjq>java -version java 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.java E:\jvm>java TestJVM zjqzjq E:\jvm>java -Dstr=hello-D TestJVM hello-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 TestJVM java 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 E:\jvm>java -server -showversion TestJVM java 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模式

点击关注                    ,第一时间了解华为云新鲜技术~

声明:本站所有文章                ,如无特殊说明或标注,均为本站原创发布                   。任何个人或组织                ,在未征得本站同意时                    ,禁止复制                  、盗用       、采集          、发布本站内容到任何网站                  、书籍等各类媒体平台    。如若本站内容侵犯了原著者的合法权益   ,可联系我们进行处理             。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
extending to(Extending Python with C or C++¶)