Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JVM Flags介绍-Heap相关

JVM Flags介绍-Heap相关

作者头像
LNAmp
发布于 2018-09-05 07:48:56
发布于 2018-09-05 07:48:56
1.6K0
举报

JVM flag类别

  • 标准flags,标准flags一般都是最基本的flags,而且在将来JVM的发布版本中基本不会改变的,例如-server -client
  • X flags,这类的特点是非标准,随着JVM版本不同可能会改变;这类flags都是以-X开头,通过java -X可以列出所有(少了-Xcomp)
  • XX flags,这类也是非标准的。Xflags很稳定,XXflags可能更加实验性(主要被JVM开发者用于debug和优化JVM实现)。在使用X flags或者XX flags之前一定要明白flag的使用方式和可能带来的副作用。XX flags都以-XX开头,但是语法根据flag type不同而不同

XXflags使用方式

  • 如果是boolean flag,使用+ -。例如<b>-XX:+<name></b> activate <b><name></b>,-号表明deactives that option.
  • 对于非boolean flag,使用-XX:<name>=<value>的方式

关于堆调整(Heap Tuning)的Flags

以下的讨论的heap是这样的heap(堆):基于经典分类,分为young gen, old gen , permanent gen 。1.8已经没有permanent gen,不在该讨论范围

-Xms and -Xmx(or: -XX:InitialHeapSize and -XX:MaxHeapSize)

-Xms和-Xms是目前最流行的JVM flags,用来指定初始heap大小和最大heap大小 一般用k表示kilo,m表示mega,g表示giga,例如 <pre>java -Xms128m -Xmx2g myapp</pre>表示myapp应用堆初始化大小为128m bytes,最大为2g bytes。 主要注意的是-Xms -Xmx相当于对应-XX的别名,当我们使用-XX:+PrintCommandLineFlags时,需要搜索InitialHeapSize和MaxHeapSize,而不是Xms和Xmx

-XX:+HeapDumpOnOutOfMemoryError ,-XX:HeapDumpPath=<path>

当我们系统发生OOM错误的时候,通过我们需要jmap heap dump,但是有可能虚拟机已经crash了的时候,我们最好设置-XX:+HeapDumpOnOutOfMemoryError,这样在发生OOM的时候回自动heap dump,由于通常heap dump文件都很大,所有最好是指定path

-XX:OnOutOfMemoryError

当我们需要在发生OOM的时候执行一些脚本或命令,我们可以通过该flag指定 <pre>$ java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof -XX:OnOutOfMemoryError ="sh ~/cleanup.sh" MyApp</pre>

-XX:PermSize and -XX:MaxPermSize

可以使用-XX:PermSize指定初始化Permanent大小,使用MaxPermSize指定最大大小

-XX:InitialCodeCacheSize and -XX:ReservedCodeCacheSize

一个经常被忽视的JVM内存区域是"code cache",用来存储方法编译后的native code。平常该区域不会存在性能问题,但是一旦发生问题都是灾难性的。当code cache区域用尽时,JVM会给出警告信息然后切换到"interpreted-only "模式,该模式下停止JIT编译器,字节码不能编译成native code,性能急速下降。可以通过设置-XX:InitialCodeCacheSize and -XX:ReservedCodeCacheSize来调整code cache区域大小

-XX:+UseCodeCacheFlushing

这个参数与code cache有关,当code cache持续增长时,发生overflow是迟早的事情,此时可以通过设置UseCodeCacheFlushing来避免最终切换到interpreted-only模式。从名字可以看出,用法就是当JVM code cache填满时会丢掉一些编译了的代码从而避免进入interpreted-only 模式。但是该种方法治标不治本,还是得找出根源修复内存泄露的问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016.06.08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java生产环境下性能监控与调优详解
-version就是查看当前机器的java是什么版本,是什么类型的JVM(Server/Client),采用的是什么执行模式。比如,在我的机器上的结果如下:
用户1212940
2022/04/13
4310
Java生产环境下性能监控与调优详解
2019年最受关注的Java关键词是什么?
2.-Xmx:最大堆大小。java.lang.OutOfMemoryError:Java heap这个错误可以通过配置-Xms和-Xmx参数来设置。
JAVA葵花宝典
2020/02/20
3260
生产环境 OOM 与 GC 问题的处理思路
部署到生产环境的应用,无论是 C/S 结构,还是 B/S 结构的应用服务。肯定有基于 Shell 脚本编写的启动脚本。C/S 结构的应用服务的 Shell 脚本一般是公司内部开发人员编写的;以下一个 C/S 结构应用服务的简单启动脚本。
BUG弄潮儿
2021/03/22
1.1K0
JVM之常用监控工具
请注意,jstat命令提供了更多选项和功能,您可以使用jstat -options命令查看完整的选项列表和描述。
九转成圣
2024/04/10
1160
JVM之常用监控工具
jvm 调优命令_java jvm调优工具
所谓的标准参数,就是不会随着我们JDK 变化而变化版本的参数 这种参数可以通过Java -help查看(和Java -version使用方式一样)
全栈程序员站长
2022/11/17
1.1K0
jvm 调优命令_java jvm调优工具
JVM 学习笔记 (六)
  前几篇文章和大家介绍了JVM中的内存模型以及垃圾回收器,今天和大家一起学习一下在平时jvm调优的过程中常用的参数以及命令。
会说话的丶猫
2020/08/06
3960
JVM 学习笔记 (六)
Java虚拟机详解(五)------JVM参数(持续更新)
  JVM参数有很多,其实我们直接使用默认的JVM参数,不去修改都可以满足大多数情况。但是如果你想在有限的硬件资源下,部署的系统达到最大的运行效率,那么进行相关的JVM参数设置是必不可少的。下面我们就来对这些JVM参数进行详细的介绍。
IT可乐
2019/09/29
7810
Java虚拟机详解(五)------JVM参数(持续更新)
Tomcat__05_JVM_排障工具
用来查看Java进程的具体状态, 包括进程ID,进程启动的路径及启动参数等等,与unix上的ps类似,只不过jps是用来显示java进程,可以把jps理解为ps的一个子集。 常用参数如下: -q:忽略输出的类名、Jar名以及传递给main方法的参数,只输出pid -m:输出传递给main方法的参数,如果是内嵌的JVM则输出为null -l:输出完全的包名,应用主类名,jar的完全路径名 -v:输出传给jvm的参数 注意: 使用jps 时的运行账户要和JVM 虚拟机启动的账户一致。若启动JVM虚拟机是运行的账户为www,那使用jps指令时,也要使用www 用户去指定。 sudo -u www jps
Cyylog
2020/08/19
5780
深入理解Java之JVM堆内存分配
Java堆是被所有线程共享的一块内存区域,所有对象和数组都在堆上进行内存分配。为了进行高效的垃圾回收,虚拟机把堆内存划分成新生代、老年代和永久代(1.8中无永久代,使用metaspace实现)三块区域
xiangzhihong
2018/02/06
1.6K0
深入理解Java之JVM堆内存分配
JDK 17 之 JVM调优 史诗级 教程
性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。 架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。
猫头虎
2024/04/08
1.5K0
JDK 17 之 JVM调优 史诗级 教程
谈JVM线程和内存参数合理性设置
在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!
京东技术
2023/08/25
2K0
谈JVM线程和内存参数合理性设置
史上最全的JVM配置参数大全
1、JVM参数配置 我们学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之,JVM监控与调优主要的着眼点在于如何配置、如何监控、如何优化3点上。
九转成圣
2024/04/10
1.4K0
JVM04-JVM内存泄露的场景以及排查
这一篇介绍一下JVM中各种内存溢出及其处理方法。 本文会按照JVM中内存划分来介绍各种内存溢出的例子。
码农飞哥
2021/08/18
4810
JVM性能调优篇
GC 优化的基本原则是:将不同的 GC 参数应用到两个及以上的服务器上然后比较它们的性能,然后将那些被证明可以提高性能或减少 GC 执行时间的参数应用于最终的工作服务器上。
李红
2019/05/29
9940
大型跨境电商 JVM 调优经历
前提: 某大型跨境电商业务发展非常快,线上机器扩容也很频繁,但是对于线上机器的运行情况,特别是jvm内存的情况,一直没有一个统一的标准来给到各个应用服务的owner。经过618大促之后,和运维的同学讨论了下,希望将线上服务器的jvm参数标准化,可以以一个统一的方式给到各个应用,提升线上服务器的稳定性,同时减少大家都去调整jvm参数的时间。 参考了之前在淘宝天猫工作的公司的经历:经过大家讨论,根据jdk的版本以及线上机器配置,确定了一个推荐的默认jvm模版: 最终推荐的jvm模版: jdk版本 机器配置 建议jvm参数 备注 jdk1.7 6V8G -server -Xms4g -Xmx4g -Xmn2g -Xss768k -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=68 -verbose:gc -XX:+PrintGCDetails -Xloggc:{CATALINA_BASE}/logs/gc.log -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath={CATALINA_BASE}/logs 前台 jdk1.7 8V8G -server -Xms4g -Xmx4g -Xmn2g -Xss768k -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=68 -verbose:gc -XX:+PrintGCDetails -Xloggc:{CATALINA_BASE}/logs/gc.log -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath={CATALINA_BASE}/logs 前台 jdk1.7 4V8G -server -Xms4g -Xmx4g -Xmn2g -Xss768k -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=68 -verbose:gc -XX:+PrintGCDetails -Xloggc:{CATALINA_BASE}/logs/gc.log -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath={CATALINA_BASE}/logs 前台 jdk1.7 6V8G -server -Xms4g -Xmx4g -XX:MaxPermSize=512m \ -verbose:gc -XX:+PrintGCDetails -Xloggc{CATALINA_BASE}/logs/gc.log -XX:+PrintGCTimeStamps \ 后台 某互联网(bat)公司的推荐配置:
芋道源码
2018/07/31
1.4K0
大型跨境电商 JVM 调优经历
【OOM】JVM问题经验总结
备注:默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制(MinHeapFreeRatio参数可以调整)
章鱼carl
2022/03/31
5400
Hotspot JVM常用选项
1. 标准选项:这类选项的功能是很稳定的,在后续版本中也不太会发生变化,即使有变化也必须保证向后兼容。运行java或java -help可以看到所有的标准选项。所有的标准选项都是以“-”开头,比如-version,-server等。
saintyyu
2021/11/22
3650
Hotspot JVM常用选项
JVM Param
-Xss 等价于 -XX:ThreadStackSize= 线程栈的大小,默认1M
itliusir
2019/12/11
8510
JVM(JAVA虚拟机)调优及原理
所有新生成的对象首先都是放在年轻代。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。年轻代一般分3个区,1个Eden区,2个Survivor区(from 和 to)。
良月柒
2019/03/19
7960
JVM参数调优基础-参数的类型详解
-help -server -client -version -showversion -cp -classpath
JavaEdge
2020/05/27
3.1K0
相关推荐
Java生产环境下性能监控与调优详解
更多 >
LV.0
这个人很懒,什么都没有留下~
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档