第二季: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 段落

相关文章
|
4月前
|
存储 算法 Java
惊!Java程序员必看:JVM调优揭秘,堆溢出、栈溢出如何巧妙化解?
【8月更文挑战第29天】在Java领域,JVM是代码运行的基础,但需适当调优以发挥最佳性能。本文探讨了JVM中常见的堆溢出和栈溢出问题及其解决方法。堆溢出发生在堆空间不足时,可通过增加堆空间、优化代码及释放对象解决;栈溢出则因递归调用过深或线程过多引起,调整栈大小、优化算法和使用线程池可有效应对。通过合理配置和调优JVM,可确保Java应用稳定高效运行。
143 4
|
2月前
|
Java
jvm复习,深入理解java虚拟机一:运行时数据区域
这篇文章深入探讨了Java虚拟机的运行时数据区域,包括程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、元空间和运行时常量池,并讨论了它们的作用、特点以及与垃圾回收的关系。
66 19
jvm复习,深入理解java虚拟机一:运行时数据区域
|
2月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
36 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
2月前
|
存储 算法 Java
Java虚拟机(JVM)的内存管理与性能优化
本文深入探讨了Java虚拟机(JVM)的内存管理机制,包括堆、栈、方法区等关键区域的功能与作用。通过分析垃圾回收算法和调优策略,旨在帮助开发者理解如何有效提升Java应用的性能。文章采用通俗易懂的语言,结合具体实例,使读者能够轻松掌握复杂的内存管理概念,并应用于实际开发中。
|
2月前
|
Arthas 监控 数据可视化
JVM进阶调优系列(7)JVM调优监控必备命令、工具集合|实用干货
本文介绍了JVM调优监控命令及其应用,包括JDK自带工具如jps、jinfo、jstat、jstack、jmap、jhat等,以及第三方工具如Arthas、GCeasy、MAT、GCViewer等。通过这些工具,可以有效监控和优化JVM性能,解决内存泄漏、线程死锁等问题,提高系统稳定性。文章还提供了详细的命令示例和应用场景,帮助读者更好地理解和使用这些工具。
|
3月前
|
存储 缓存 监控
【JVM调优】如何进行JVM调优?一篇文章就够了!
深入解读JVM性能的监控、定位和调优方案,阐述jps/stat/jstack、MAT等常用性能分析工具的使用,提出JVM参数、内存溢出、内存泄漏、CPU飙升、GC频繁等实际场景下JVM调优的方案。
302 15
【JVM调优】如何进行JVM调优?一篇文章就够了!
|
2月前
|
存储 算法 Java
深入理解Java虚拟机(JVM)及其优化策略
【10月更文挑战第10天】深入理解Java虚拟机(JVM)及其优化策略
45 1
|
2月前
|
安全 Java API
🌟探索Java宇宙:深入理解Java技术体系与JVM的奥秘
本文深入探讨了Java技术体系的全貌,从Java语言的概述到其优点,再到Java技术体系的构成,以及JVM的角色。旨在帮助Java开发者全面了解Java生态,提升对Java技术的认知,从而在编程实践中更好地发挥Java的优势。关键词:Java, JVM, 技术体系, 编程语言, 跨平台, 内存管理。
41 2
|
2月前
|
Java Android开发 开发者
【编程进阶知识】精细调控:掌握Eclipse JVM参数配置的艺术
本文详细介绍了如何在Eclipse中配置JVM参数,包括内存的初始和最大值设置。通过具体步骤和截图演示,帮助开发者掌握JVM参数的精细调控,以适应不同的开发和测试需求。
45 1
|
2月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
49 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用