第二季:2.你说你做过JVM调优和参数配置,请问如何盘点查看JVM系统默认值 【Java面试题】

简介: 第二季:2.你说你做过JVM调优和参数配置,请问如何盘点查看JVM系统默认值 【Java面试题】

前言


2022 10/11 21:21

路漫漫其修远兮,吾将上下而求索


本文是根据尚硅谷学习所做笔记

仅供学习交流使用,转载注明出处

推荐

尚硅谷Java大厂面试题第2季,面试必刷,跳槽大厂神器

第二季大佬总结

2.你说你做过JVM调优和参数配置,请问如何盘点查看JVM系统默认值

说明

本文目录前是相关视频的名字和具体视频中思维导图的名字

题目

2.你说你做过JVM调优和参数配置,请问如何盘点查看JVM系统默认值

JVM的参数类型

59_JVM的标配参数和X参数

标配参数



  • -version
  • -help
  • java -showversion

X参数(了解)



  • -Xint:解释执行
  • -Xcomp:第一次使用就编译成本地代码
  • -Xmixed:混合模式
    解释执行+即时编译

XX参数

60_JVM的XX参数之布尔类型

Boolean类型

公式:


-XX:+ 或者-某个属性

+表示开启 -表示关闭

Case:


-XX:-PrintGCDetails:表示关闭了GC详情输出

是否打印GC收集细节

-XX:-PrintGCDetails

-XX:+PrintGCDetails

是否使用串行垃圾回收器

package jvm2;
/**
 * @author CSDN@日星月云
 * @date 2022/10/11 22:10
 */
public class HelloGC {
    public static void main(String[] args) throws Exception {
        System.out.println("HelloGC");
        Thread.sleep(Integer.MAX_VALUE);
    }
}

无JVM参数设值

E:\IdeaProjects\JavaMS\second_2>jps -l
21732 jvm2.HelloGC
16168
5272 sun.tools.jps.Jps
23004 org.jetbrains.jps.cmdline.Launcher
E:\IdeaProjects\JavaMS\second_2>jinfo -flag PrintGCDetails 21732
-XX:-PrintGCDetails



E:\IdeaProjects\JavaMS\second_2>jinfo -flag PrintGCDetails 21732
-XX:-PrintGCDetails
E:\IdeaProjects\JavaMS\second_2>jps -l
16736 jvm2.HelloGC
16168
20536 org.jetbrains.jps.cmdline.Launcher
6956 sun.tools.jps.Jps
E:\IdeaProjects\JavaMS\second_2>jinfo -flag PrintGCDetails 16736
-XX:+PrintGCDetails

61_JVM的XX参数之设值类型

KV设值类型

  • 公式:-XX:属性key=属性value

不满意初始值,可以通过下列命令调整

  • case
  • -XX:MetaspaceSize=128m
  • XX:MaxTenuringThreshold=15

默认

E:\IdeaProjects\JavaMS\second_2>jinfo -flag MetaspaceSize 18864
-XX:MetaspaceSize=21807104

设值

-XX:MetaspaceSize=1024m
E:\IdeaProjects\JavaMS\second_2>jinfo -flag MetaspaceSize 22092
-XX:MetaspaceSize=1073741824
E:\IdeaProjects\JavaMS\second_2>jinfo -flag MaxTenuringThreshold 22092
-XX:MaxTenuringThreshold=15

62_JVM的XX参数之XmsXmx坑题

jinfo举例,如何查看当前运行程序的配置

公式——jinfo -flag配置项 进程编号

Case1

E:\IdeaProjects\JavaMS\second_2>jinfo -flag InitialHeapSize 22092
-XX:InitialHeapSize=123731968

Case2

E:\IdeaProjects\JavaMS\second_2>jinfo -flags 22092
Attaching to process ID 22092, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.60-b23
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=123731968 -XX:MaxHeapSize=1977614336 -XX:MaxNewSize=659030016 -XX:Metas
paceSize=1073741824 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=40894464 -XX:OldSize=82837504 -XX:+UseCompressedClassPointers -XX:+UseComp
ressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
Command line:  -XX:MetaspaceSize=1024m -javaagent:E:\IntelliJ IDEA 2021.1\lib\idea_rt.jar=1037:E:\IntelliJ IDEA 2021.1\bin -Dfile.encod
ing=UTF-8

Non-default默认设置

Command line人为设置

Case3

E:\IdeaProjects\JavaMS\second_2>jinfo -flag InitialHeapSize 22092
-XX:InitialHeapSize=123731968
E:\IdeaProjects\JavaMS\second_2>jinfo -flag UseSerialGC 22092
-XX:-UseSerialGC
E:\IdeaProjects\JavaMS\second_2>jinfo -flag UseParallelGC 22092
-XX:+UseParallelGC
E:\IdeaProjects\JavaMS\second_2>jinfo -flag MaxHeapSize 22092
-XX:MaxHeapSize=1977614336

题外话(坑题)

两个经典参数: -xms和-Xmx


这个你如何解释


这两个参数,还是属于XX参数,因为取了别名


-Xms 等价于 -XX:InitialHeapSize :初始化堆内存(默认只会用最大物理内存的64分1)

-Xmx 等价于 -XX:MaxHeapSize :最大堆内存(默认只会用最大物理内存的4分1)

盘点家底查看JVM默认值

63_JVM盘点家底查看初始默认值

-XX:+PrintFlagsInitial

  • 主持要查看初始默认
  • 公式
  • java -XX:+PrintFlagsInitial -version
  • java -XX:+PrintFlagsInitial
  • case
E:\IdeaProjects\JavaMS\second_2>java -XX:+PrintFlagsInitial
[Global flags]
    uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
    uintx AdaptiveSizePausePolicy                   = 0                                   {product}
    ...
     bool ZeroTLAB                                  = false                               {product}
     intx hashCode                                  = 5                                   {product}
E:\IdeaProjects\JavaMS\second_2>java -XX:+PrintFlagsInitial -version
[Global flags]
    uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
    uintx AdaptiveSizePausePolicy                   = 0                                   {product}

64_JVM盘点家底查看修改变更值

-XX:+PrintFlagsFinal

  • 主要查看修改更新
  • 公式
  • java -XX:+PrintFlagsFinal -version
  • java -XX:+PrintFlagsFinal -version
  • Case

会将JVM的各个结果都进行打印

如果有 := 表示修改过的, = 表示没有修改过的

PrintFlagsFinal举例,运行java命令的同时打印出参数

C:\Users\lenovo\Desktop\临时>more T.java
/**
 * @author CSDN@日星月云
 * @date 2022/10/11 23:01
 */
public class T {
    public static void main(String[] args) {
        int a=100;
        int b=200;
        int retValue=a+b;
        System.out.println("retValue: " +retValue);
    }
}
C:\Users\lenovo\Desktop\临时>javac T.java
C:\Users\lenovo\Desktop\临时>java T
C:\Users\lenovo\Desktop\临时>java -XX:+PrintFlagsFinal -XX:MetaspaceSize=512m T
    uintx MetaspaceSize                            := 536870912                           {pd product}

-XX:+PrintCommandLineFlags

  • 打印命令行参数
C:\Users\lenovo\Desktop\临时>java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=123581248 -XX:MaxHeapSize=1977299968 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

最后


2022 10/11 21:54


p58


Markdown 1937 字数 136 行数

HTML 1617 字数 69 段落

相关文章
|
10天前
|
运维 Java
Java版HIS系统 云HIS系统 云HIS源码 结构简洁、代码规范易阅读
云HIS系统分为两个大的系统,一个是基层卫生健康云综合管理系统,另一个是基层卫生健康云业务系统。基层卫生健康云综合管理系统由运营商、开发商和监管机构使用,用来进行运营管理、运维管理和综合监管。基层卫生健康云业务系统由基层医院使用,用来支撑医院各类业务运转。
36 5
|
1天前
|
小程序 Java 程序员
【Java探索之旅】我与Java的初相识(二):程序结构与运行关系和JDK,JRE,JVM的关系
【Java探索之旅】我与Java的初相识(二):程序结构与运行关系和JDK,JRE,JVM的关系
9 0
|
2天前
|
人工智能 运维 Java
Serverless 应用引擎产品使用之在阿里云函数计算中设置JVM参数如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
8 0
|
2天前
|
监控 Java BI
java基于云计算的SaaS医院his信息系统源码 HIS云平台源码
基于云计算技术的B/S架构的HIS系统源码,SaaS模式Java版云HIS系统,融合B/S版电子病历系统,支持电子病历四级,HIS与电子病历系统均拥有自主知识产权。
21 5
|
7天前
|
监控 Ubuntu Java
Java VisualVM远程监控JVM
Java VisualVM远程监控JVM
Java VisualVM远程监控JVM
|
11天前
|
JavaScript Java 测试技术
基于Java的珠宝购物网站系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的珠宝购物网站系统的设计与实现(源码+lw+部署文档+讲解等)
24 0
|
11天前
|
JavaScript Java 测试技术
基于Java的电影评论系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的电影评论系统的设计与实现(源码+lw+部署文档+讲解等)
30 0
|
11天前
|
JavaScript Java 测试技术
基于Java的实验室设备管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的实验室设备管理系统的设计与实现(源码+lw+部署文档+讲解等)
27 1
|
12天前
|
JavaScript Java 测试技术
基于Java的社区人员管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的社区人员管理系统的设计与实现(源码+lw+部署文档+讲解等)
26 2
|
12天前
|
JavaScript Java 测试技术
基于Java的汽车维修保养智能预约系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的汽车维修保养智能预约系统的设计与实现(源码+lw+部署文档+讲解等)
25 2