Java的运行时参数简单总结

简单学习了下Oracle官方的资料:
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BABDDFII
之前也遇到了很多问题, 想着一起学习下jvm的参数.
这里简单一边学习一遍翻译了一下
不是很全面, 将自己最近用到的重要参数进行了寿命
其他自己还没有用到的参数就没有列示, 我等菜鸡可以看这个, 高手直接看原文吧.

Java参数分类

正常运行一个Java程序比较简单, 直接java -jar 就可以运行.
但是如何长时间稳定高性能的运行程序就比较复杂, 需要关注比较多的内容
java的参数也比较多,也有一些分类:
1. 标准参数
2. 非标准参数
3. 高级运行时的参数
4. 高级JIT相关的参数
5. 高级系统监控服务类的参数
6. 高级GC相关的参数.

1. 标准参数

-agentlib:jdwp=transport=dt_socket,server=y,address=8000
#可以用来开放调试端口.
-agentpath:pathname[=options]
#可以将pathname里面的agent加载到内存里面
-client -server
#客户端模式,或者是服务端模式.
#client模式启动快,int模式多一些,jit少一些. 运行时效率低
#server模式较早的进行了jit的介入,启动慢,但是运行效率好一些.
-Dproperty=value
#比如可以进行 -Dport=5201就可以运行时修改端口了.

2. 非标准参数

-X
# java -X 可以展示部分非标准参数.
-Xms<size> 设置初始 Java 堆大小
-Xmx<size> 设置最大 Java 堆大小
-Xss<size> 设置 Java 线程堆栈大小
# 注意一般情况下 -Xmx是memory max是 最大的heap内存大小
# -Xms 是初始化最小的的heap内存大小 memory small
# 注意以上两个参数,如果不设置的话: 默认最小内存是系统内存的六十四分之一,最大内存是四分之一.
# 建议 最大内存和最小内存设置成一样大小, 这样可以避免jvm的内存缩减扩容影响性能.
# Xss 是java线程的栈区大小, 注意一般中文翻译的 堆栈的说法总会让人产生误解.
# 需要注意 Xss的内存不是堆区管理的. 占用的总内存可以理解为 threads数*Xss的数值.
# 栈区太大了会占用较多的内存,并且创建线程速度也会变慢, 但是如果太小,很容易出现stackoverflow.
部分系统默认的栈区大小:
Linux/ARM (32-bit): 320 KB
Linux/i386 (32-bit): 320 KB
Linux/x64 (64-bit): 1024 KB
OS X (64-bit): 1024 KB
Oracle Solaris/i386 (32-bit): 320 KB
Oracle Solaris/x64 (64-bit): 1024 KB

2.非标准参数

-XX:NewRatio
#-XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
# Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。
-XX:SurvivorRatio
#设置为8,则两个Survivor区与一个Eden区的比值为2:8,
#一个Survivor区占整个年轻代的1/10
-Xbatch # 禁用后台编译
-Xmixed 混合模式执行 (默认)
-Xint 仅解释模式执行
-Xcomp 强制进行编译.
# 注意可以使用这个参数设定 多少次的进行编译. -XX:CompileThreshold
# 默认情况下 client 是1000次 server是10000次.
-Xnoclassgc
# 启用这两个参数后gc时将不会清理类对象,可能会出现内存浪费甚至内存泄漏问题,
# 如果情况严重可能会填满持久代。
-Xprof
# 能够将jvm运行时的性能数据展示到标准输出,开发测试有效
# 编译用于生产会影响性能.

3. 高级运行时的参数

-XX:ErrorFile=filename
# 严重错误时能够将错误日志打印出来默认在当前运行时的路径.
-XX:+FlightRecorder -XX:-FlightRecorder
# 使用启用FilghtRecorder + 表示启用 - 表示禁用.
XX:LargePageSizeInBytes=size
# 内存页面大小, 必须为2的幂, 一般不建议设置,容易出问题.
-XX:MaxDirectMemorySize=size
# nio 使用本地内存的大小,好像有一个64m的问题因这个导致.
-XX:NativeMemoryTracking=mode
#off summary detail 三种模式, 用于监控jvm的本地内存.
-XX:+TraceClassLoading
# 跟踪类的加载
-XX:-UseCompressedOops
# 不适用类指针压缩,一般32g一下的堆区自动之争压缩,32g以上不能使用.

4. 高级JIT编译器的参数

-XX:CICompilerCount=threads
# 设置编译器的数量,server模式默认为2,client模式默认为1
-XX:CodeCacheMinimumFreeSpace=size
# 设置代码缓存吃的最小空闲空间. ARM上面code cache 好像跟x86不太一样.
-XX:CompileThreshold=invocations
# 设置默认编译的最小调用次数.
-XX:+DoEscapeAnalysis
# 逃逸分析, 如果确认不会被其他线程使用可以直接栈上分配内存.提高内存部署效率
# 栈上分配能够使用寄存器,效率比物理内存(主内存)高两个数量级.
-XX:InitialCodeCacheSize=size
# CodeCache如果太小, 会影响性能, 导致方法只能int执行不能complie执行.
-XX:ReservedCodeCacheSize=size
# 可以开启分层加载, 会影响启动速度,但是有助于减少部分codecache的使用.

5. 高级服务监控参数

-XX:+HeapDumpOnOutOfMemoryError
# 开发利器运维噩梦.磁盘会爆满,但是会保留犯罪现场,有助于排查问题.
-XX:HeapDumpPath=path
# 别跟应用在一起, 避免磁盘满了 业务停了.运维背锅.
-XX:+PrintClassHistogram
# 停止服务时打印类的统计图.

6. 高级GC方面的参数

-XX:ActiveProcessorCount=x
# 感觉vm超售很严重时可能有些用处,不过是牺牲自己照亮别人.
-XX:ConcGCThreads=threads
# 并行GC的线程数..
-XX:+DisableExplicitGC
# 禁用了显示调用 system.gc() 如果有nio直接使用堆外内存的情况下,
# 禁用了ExplicitGC可能会出现堆外内存异常.
-XX:MaxRAMPercentage=percent
# 之前说了默认值是 25, 如果是专用机器可以适当改成60甚至更高.
# 但是注意还有堆外内存还有方法区,直接内存等,不要设置的太高.
-XX:MaxTenuringThreshold=threshold
# 好像存活多少次就会晋升到老年代的含义.并行GC默认15.CMS默认是6,最高值是15
-XX:MetaspaceSize=size
# 元空间的设置, jdk8没有了持久代的含义..
-XX:ParallelGCThreads=threads
# 默认值是CPU的个数, 所有有时候疯狂GC是CPU 就被占满了机器卡爆
# 不知道能否设置成低于CPU的个数,保证部分业务使用.
# fast failure的原理是需要尽快宕机的
-XX:+PrintGC
# 打印GC的信息.
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
# 打印GC的时间戳和GC的详细信息
-XX:TLABSize=size
# 这个参数没玩过, 暂时不清楚 我理解成slab了..
-XX:+UseGCOverheadLimit
# 好像就是 98%堆内存无法被回收时直接干掉jvm显示为oom. fast failure
-XX:+UseNUMA
# NUMA 很多程序的痛苦..
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:+UseParNewGC
-XX:+UseSerialGC
# 好多种不同的GC方式,需要验证再改,如果水平跟我差不多,就不要改默认.

随性翻译: Java的运行时参数简单总结的更多相关文章

  1. Java虚拟机运行时栈帧结构--《深入理解Java虚拟机》学习笔记及个人理解(二)

    Java虚拟机运行时栈帧结构(周志明书上P237页) 栈帧是什么? 栈帧是一种数据结构,用于虚拟机进行方法的调用和执行. 栈帧是虚拟机栈的栈元素,也就是入栈和出栈的一个单元. 2018.1.2更新(在 ...

  2. Java程序运行时内存划分

    1.Java程序跨平台运行的原因 主要原因是:各种平台的JVM和字节码文件 Java源程序--具体平台的机器代码文件---被编译器翻译成平台无关的Class文件,又用特定JVM运行字节码文件,JVM在 ...

  3. <JVM下篇:性能监控与调优篇>04-JVM运行时参数

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  4. 《深入理解Java虚拟机》(二)Java虚拟机运行时数据区

    Java虚拟机运行时数据区 详解 2.1 概述 本文参考的是周志明的 <深入理解Java虚拟机>第二章 ,为了整理思路,简单记录一下,方便后期查阅. 2.2 运行时数据区域 Java虚拟机 ...

  5. 查看JVM运行时参数

    1.查看JVM运行时参数 -XX:+PrintFlagsInitial -XX:PrintFlagsFinal -XX:+UnlockExperimentalVMOptions 解锁实验参数 -XX: ...

  6. Hadoop JobTracker和NameNode运行时参数查看

      1)JobTracker运行时参数: hadoop@ubuntu:/home/zhangchao3$ ps -ef | grep job hadoop 29563 1 0 11:34 pts/12 ...

  7. java程序运行时内存分配详解

    java程序运行时内存分配详解 这篇文章主要介绍了java程序运行时内存分配详解 ,需要的朋友可以参考下   一. 基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个 ...

  8. JVM探秘:jinfo查看JVM运行时参数

    本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 如何查看JVM运行时参数,对于线上JVM调优是很关键的,因为只有知道了当前使用的JVM ...

  9. [JVM教程与调优] 什么是JVM运行时参数?

    我们接着上一章节[JVM教程与调优] JVM都有哪些参数类型?的内容继续讲解,这章我们来介绍一下:如何查看JVM运行时参数.这一点十分重要,因为我们在进行JVM参数调优的时候,我们首先得知道目前系统运 ...

  10. 面试常问的 Java 虚拟机运行时数据区

    写在前面 本文描述的有关于 JVM 的运行时数据区是基于 HotSpot 虚拟机. 概述 JVM 在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以 ...

随机推荐

  1. Python 初学者必看:Python 异常处理集合

    摘要:作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,本文专门介绍 python 异常处理. 异常 广义上的错误分为错误和异常 错误指的是可以人为避免 异常是指在语 ...

  2. 华为云API中心:汇聚千行百业API资产,打造API全生命周期极致体验

    摘要:2022年11月9日,华为云全球生态部总裁康宁在华为全联接大会2022上发表"共创新价值,一切皆服务"主题演讲,并发布全新的华为云API中心. 本文分享自华为云社区<华 ...

  3. 讲透学烂二叉树(三):二叉树的遍历图解算法步骤及JS代码

    二叉树的遍历是指不重复地访问二叉树中所有结点,主要指非空二叉树,对于空二叉树则结束返回. 二叉树的遍历分为 深度优先遍历 先序遍历:根节点->左子树->右子树(根左右),有的叫:前序遍历 ...

  4. Ambari2.7.3.0添加组件

    Ambari 2.7.3.0安装新组件和之前版本略有不同,本文将简述安装新组件的简单过程. 前提是大家已经安装好Ambari 2.7.3.0 这时候由于有一些组件没有添加,就需要安装新的组件. 首先我 ...

  5. 从此告别写 SQL!DataLeap 帮你零门槛完成“数据探查”

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在日常数据处理工作中,产品.运营.研发或数据分析师经常会面临数据量大且混乱.质量参差不齐的问题,需要花费大量时间和 ...

  6. 视频云AI时代,穿越市场第一,想象更多

    国际权威数据公司IDC发布<中国视频云市场跟踪(2023 H1)>报告:自2018年至今,阿里云持续保持中国视频云整体市场第一,整体市场占比达24.4%. 01 第一之外,低谷之上 近期, ...

  7. AliPLC 智能丢包补偿算法,提升弱网环境的通话质量

    在线视频/语音通话逐渐成为人们日常生活的一部分,而复杂多变的网络环境会导致部分音频包无法传送到接收端,造成语音信号的短时中断或者卡顿,这会严重影响通话体验,为解决这类问题,阿里云视频云音频技术团队在综 ...

  8. Codeforece : 1360C. Similar Pairs(水题)

    https://codeforces.com/contest/1360/problem/C We call two numbers xx and yy similar if they have the ...

  9. Codeforces Round #618 (Div. 2) A~E

    原作者为 RioTian@cnblogs, 本作品采用 CC 4.0 BY 进行许可,转载请注明出处. 1300A. Non-zero 题意:给你一个数组,每次操作你可以使其中任意元素的值+1,问最少 ...

  10. i-MES生产制造管理系统-生产过程检验SPC(一)

    说起质量管理,那一定少不了 SPC,SPC中文名叫统计过程控制,对生产过程中记录的数据进行分析,及时了解不良情况出现的几率,并采取必要的措施达到消除影响的目的,这其中有几个关键术语,比如 UCL等. ...