JVM基础参数配置简介

java查看当前项目的jvm_java查看当前项目的jvm

标准选项(cmd下 输入java 即可打印所有标准选项)
X选项也叫非标准选项(cmd下输入java -X 即可打印所有非标准选项)
XX选项(cmd下输入java -XX: PrintFlagsInitial -version,即可打印所有XX选项的默认值)
本次分享主要就是说基于HotSpot JVM平台,讲这三类JVM参数,其中还会演示一些工具平台的使用

java查看当前项目的jvm_技术分享_02

java查看当前项目的jvm_JVM_03

java查看当前项目的jvm_JVM_04

有时候输出并不是以X选项的模式输出的,而是以XX选项输出的,值的单位一般为KB

java查看当前项目的jvm_参数_05

指定JIT编译器模式
Java是一种解释型语言,但随着JIT技术的进步,它能在运行时将Java的字节码编译成本地代码。以下是几个相关的选项:
-Xint表示禁用JIT,所有字节码都被解释执行,这个模式的速度最慢的(字节码->机器码)。
-Xcomp表示所有字节码都首先被编译成本地代码(即机器码),然后再执行。
-Xmixed,默认模式,让JIT根据程序运行的情况,有选择地将某些代码编译成本地代码。
-Xcomp和-Xmixed到底谁的速度快,针对不同的程序可能有不同的结果,基本还是推荐用默认模式。

JVM进阶参数配置简介

java查看当前项目的jvm_字节码_06

-XX: PrintFlagsFinal:所有XX参数的默认值
and -XX: PrintFlagsInitial 查看所有JVM参数启动的初始值
-XX: UnlockExperimentalVMOptions
-XX: UnlockDiagnosticVMOptions
-XX: PrintCommandLineFlags 所有跟最初的默认值不同的参数及它们的值

java查看当前项目的jvm_字节码_07

-XX:MaxTenuringThreshold
-XX:MaxTenuringThreshold只对串行回收器和ParNew有效,对ParallGC无效。存活次数在串行和ParNew方式中可通过-XX:MaxTenuringThreshold来设置,ParallelScavenge则根据运行状态来决定。
-XX:PretenureSizeThreshold
-XX:PretenureSizeThreshold,设置大对象直接进入年老代的阈值。-XX:PretenureSizeThreshold只对串行回收器和ParNew有效,对ParallGC无效。默认该值为0,即不指定最大的晋升大小,一切由运行情况决定。

java查看当前项目的jvm_JVM_08

https://blog.csdn.net/qq_33301113/article/details/67071632https://www.jianshu.com/p/7ab3e3a6562e

java查看当前项目的jvm_参数_09

1、字符串存在永久代中,容易出现性能问题和内存溢出。
2、类及方法的信息等比较难确定其大小,因此对于永久代的大小指定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出。
3、永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。
4、Oracle 可能会将HotSpot 与 JRockit 合二为一。

java查看当前项目的jvm_JVM_10

java查看当前项目的jvm_java查看当前项目的jvm_11

http://www.ityouknow.com/jvm/2017/08/29/GC-garbage-collection.html

java查看当前项目的jvm_JVM_12

第二,三,四的参数对于CMS的标记过程比较慢的时候可以起到一定的缓解作用

java查看当前项目的jvm_java查看当前项目的jvm_13

java查看当前项目的jvm_java查看当前项目的jvm_14

高级参数&调试工具

下面介绍一些平时不怎么遇到的参数,以及如果出现相关的问题,可以通过JVM参数去跟踪调试,优化

java查看当前项目的jvm_技术分享_15

GC相关的配置,其实还不止这些,这里再给大家介绍两个 -Xloggc:D:/CMSgc.log,-XX: UseGCLogFileRotation(按GC日志大小切分日志信息)但是大多数情况下这些基本够用

java查看当前项目的jvm_技术分享_16

java查看当前项目的jvm_字节码_17

java查看当前项目的jvm_字节码_18

java查看当前项目的jvm_java查看当前项目的jvm_19

总结