-XX:+PrintGCDetails -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8 -XX:NewSize=10M -XX:MaxNewSize=10M...-XX:+PrintGCDetails 启用日志 -XX:-UseAdaptiveSizePolicy 禁用动态调整,使SurvivorRatio可以起作用 -XX:SurvivorRatio=8 设置...Eden:Survivior=8 -XX:NewSize=10M -XX:MaxNewSize=10M 设置整个新生代的大小为10M 使用jmap -histo pid查看堆内的对象 断开栈和堆对象的引用...虽然objA和objB存在相互引用,但是由于栈和堆对象没有了引用关系, 垃圾回收时将objA和objB回收掉,说明JVM虚拟机未使用引用计数法来判断对象是否存活。...可达性分析算法 以GC Root对象为起点,从这些对象为起点,往下搜索,走过的路径为引用连,当一个对象到GC Roots没有任何引用连引用,则证明此对象没有被用到,将会被JVM判定为垃圾。
-XX:+PrintGCDetails -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 * @param args */ public...:+UseParallelGC -XX:+PrintGCDetails -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 ①、 -XX:+UseParallelGC...③、-Xms20M -Xmx20M 这两个参数分别表示设置最大堆,最小堆内存都是20M ④、-Xmn 参数表示设置新生代大小为 10M ⑤、-XX:SurvivorRatio=8 新生代中的 Eden...-XX:+PrintGCDetails -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 * @param args */ public...:+PrintGCDetails -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 * @param args */ public static
1.1 实例 给定JVM参数:-Xms40M -Xmx40M -Xmn10M -verbose:gc -XX:+PrintGCDetails -XX:SurvivorRatio=4 前面三个参数设置Java...-XX:SurvivorRatio=8 4 * @Author 欧阳思海 5 * @Date 2019/12/3 16:00 6 * @Version 1.0 7 **/ 8public class...分析 eden:from:to=8:1:1,这个因为前面设置了参数-XX:SurvivorRatio=8。...XX:SurvivorRatio=8 -XX:+UseSerialGC -XX:PretenureSizeThreshold=104,857,600 4 * @Author 欧阳思海 5 * @Date...XX:SurvivorRatio=8 -XX:+UseSerialGC -XX:MaxTenuringThreshold=1 4 * @Author 欧阳思海 5 * @Date 2019/12/3
JVM基础:生产环境参数实例及分析 原始配置: -Xms128m -Xmx128m -XX:NewSize=64m -XX:PermSize=64m -XX:+UseConcMarkSweepGC...Jvm内存调优: -Xms128m -Xmx128m -Xmn24m -XX:PermSize=80m -XX:MaxPermSize=80m -Xss256k-XX:SurvivorRatio...=1 使得Eden区=from space=to space=8M,降低了Eden区大小,降低YGC的时间(降低到3-4ms左右),同时通过设MaxTenuringThreshold=20,使得old...网上某个牛人的配置 :每天几百万pv一点问题都没有,网站没有停顿 $JAVA_ARGS .=" -Dresin.home=$SERVER_ROOT -server -Xms6000M...某网友的调优方案: $JAVA_ARGS .=" -Dresin.home=$SERVER_ROOT -server -Xmx3000M -Xms3000M -Xmn600M
JVM参数配置 大致方向:JVM调优的目的是保证在一定吞吐量的情况下尽可能的减少GC次数,从而减少系统停顿时间,提高服务质量和效率。...整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。 此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。...-XX:MetaspaceDetails=1024m 新生代比例大小配置 -XX:SurvivorRatio=8 eden:from:to = 8:1:1 (default) -XX:SurvivorRatio...=1024m -XX:+PrintCommandLineFlags -XX:+PrintGCDetails //使用默认 -Xmn -XX:SurvivorRatio -XX:NewRatio -XX...-flag : 输出指定args参数的值 -flags : 不需要args参数,输出所有JVM参数的值 -sysprops : 输出系统属性,等同于System.getProperties() jstat
---- 案例 虚拟机参数设置及参数说明 JDK1.6 -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -XX:+UseSerialGC -verbose:gc...:SurvivorRatio=8 * -XX:+UseSerialGC -verbose:gc -XX:+PrintGCDetails *...---- 虚拟机参数设置及参数说明 JDK1.6 -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -XX:+UseSerialGC -verbose:gc -XX...:SurvivorRatio=8 * -XX:+UseSerialGC -verbose:gc -XX:+PrintGCDetails *...案例 虚拟机参数设置及参数说明 -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -XX:+UseSerialGC -verbose:gc -XX:+PrintGCDetails
2020/11/9 8:22 */ public class PrintGCDetailsDemo { public static void main(String[] args) {...-XX:+PrintGCDetails -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8 -XX:NewSize=10M -XX:MaxNewSize=10M...参数解释: -XX:+PrintGCDetails 启用日志 -XX:-UseAdaptiveSizePolicy 禁用动态调整,使SurvivorRatio可以起作用 -XX:SurvivorRatio...=8设置Eden:Survivior=8:1 -XX:NewSize=10M -XX:MaxNewSize=10M设置整个新生代的大小为10M 写了一个Spring Boot项目,非常简单的项目,里面写了一个...:YoungGC后JVM内存使用 130048K:JVM堆总大小 0.0092873 secs:YoungGC耗时 user=0.00:YoungGC用户耗时 sys=0.00:YoungGC系统耗时
二、JAVA8之后的JVM 从图中我们可以看出JAVA8的JVM 用元空间取代了永久代 ? ? ? 三、GC作用域 ?...两个经典参数 -Xms 等价于 -XX: InitialHeapSize -Xmx 等价于 -XX: MaxHeapSize 七、查看JVM默认值 -XX:+PrintFlagsInitial:查看默认初始值...设置元空间大小 元空间的本质和永久代类似,都是对JVM规范中方法区的实现,不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。...-XX:+PrintGCdetails 输出详细的GC收集日志信息 -XX:SurvivorRatio 设置新生代中eden和S0/S1空间的比例 默认: -XX:SurvivorRatio=8 -->...Eden:S0:S1=8:1:1 修改: -XX:SurvivorRatio=4 --> Eden:S0:S1=4:1:1 SurvivorRatio值就是设置eden区的比例占多少,S0/S1相同
注意:本文仅针对 JDK7、HotSPOT Java 虚拟机,对于 JDK8 引入的 JVM 新特性及其他 Java 虚拟机,本文不予关注。 我们以一个例子开始这篇文章。...分配足够大的年轻代空间,使用 JVM 参数-XX:+PrintGCDetails -Xmx20M -Xms20M-Xmn6M 运行清单 1 所示代码,输出如清单 3 所示。 清单 3....-XX:+PrintGCDetails -Xmx1000M -Xms500M -Xmn100M -XX:SurvivorRatio=8 运行清单 4 所示代码,输出如清单 5 所示。...–XX:+SurvivorRatio=8 –XX:TargetSurvivorRatio=90 –XX:MaxTenuringThreshold=31 –XX:ParallelGCThreads=20...:设置 20 个线程进行垃圾回收; –XX:+UseParNewGC:年轻代使用并行回收器; –XX:+UseConcMarkSweepGC:年老代使用 CMS 收集器降低停顿; –XX:+SurvivorRatio
5 GC OOM GC OOM是由于JVM在GC时,对象过多,导致内存溢出,建议调整GC的策略。...在老代80%时就是开始GC,并且将-XX:SurvivorRatio(-XX:SurvivorRatio=8)和-XX:NewRatio(-XX:NewRatio=4)设置的更合理。...6 元空间OOM JDK8之后使用Metaspace来代替永久代,Metaspace是方法区在HotSpot中的实现。...Metaspace不在虚拟机内存中,而是使用本地内存也就是在JDK8中的ClassMetadata,被存储在叫做Metaspace的native memory。...出现元空间OOM问题时异常信息如下: java.lang.OutOfMemoryError: Metaspace 为了方便测试,我修改一下idea中的JVM参数,增加下面的配置: -XX:MetaspaceSize
在JVM中如果98%的时间是用于GC,且可用的Heap size 不足2%的时候将抛出此异常信息。 解决方法:手动设置JVM Heap(堆)的大小。...(我用visualvm.exe查看的) -XX:SurvivorRatio=2 :生还者池的大小,默认是2,如果垃圾回收变成了瓶颈,您可以尝试定制生成池设置 -XX:NewSize: 新生成的池的初始大小...如果 JVM 的堆大小大于 1GB,则应该使用值:-XX:newSize=640m -XX:MaxNewSize=640m -XX:SurvivorRatio=16,或者将堆的总大小的 50% 到 60%...调大新对象区,减少Full GC次数。 +XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。 ...-XX:userParNewGC 可用来设置并行收集【多CPU】 -XX:ParallelGCThreads 可用来增加并行度【多CPU】 -XX:UseParallelGC 设置后可以使用并行清除收集器
参数(-XX),此类参数各个jvm实现会有所不同,这些都是不稳定的并且不推荐在生产环境中使用。...-XX:SurvivorRatio 用于设置Eden和其中一个Survivor的比值,默认比例为8(Eden):1(一个survivor),这个值也比较重要。...请谨慎使用。见GC 的算法分析、各类垃圾收集器介绍 -XX:MaxMetaspaceSize java8中-XX:MaxMetaspaceSize=10M设置MetaSpace的最大值为10m。...-XX:OnError=”args>;args>” 出现致命ERROR之后运行自定义命令 -XX:OnOutOfMemoryError=”args>;XX:SurvivorRatio Eden区与Survivor区的大小比值 设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10 -XX
上文:jvm参数PretenureSizeThreshold让对象直接进入老年代! ---- 本文主要是通过案例打印出java虚拟机gc记录。...配置命令 -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 解释: 命令 解释 -Xms20M Java...区的空间比例是8∶1 -XX:+PrintGCDetails 标记打印日志 代码 package com.jvm.gc; /** * @author: csh * @Date: 2020/12/...1024; /** * VM参数:-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8...} public static void main(String[] args) { testAllocation(); } } 运行配置 结果 [GC (
为了认为制造 GC,我们启动时的 JVM 参数固定加上下面几个参数: -XX:+UseSerialGC -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -XX:+...下面我们使用该参数运行程序: java -XX:+UseSerialGC -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -XX:+PrintGC com.chenshuyi.GCDemo...使用下面的参数运行程序: java -XX:+UseSerialGC -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -XX:+PrintGC -XX:+PrintGCTimeStamps...打印应用由于GC而产生的停顿时间 使用下面的命令运行程序: java -XX:+UseSerialGC -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -XX:...使用下面的参数运行程序: java -XX:+UseSerialGC -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -XX:+PrintGC -XX:+PrintReferenceGC
:log/gc.log,这样可以从gc.log里看出 一些端倪出来。...我的最终配置如下(系统8G内存),每天几百万pv一点问题都没有,网站没有停顿,2009年网站没有因为内存问题down过机。 $JAVA_ARGS....-XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0 -Xnoclassgc -XX:+DisableExplicitGC XX:+UseParNewGC-XX..."; 说明一下,-XX:SurvivorRatio=65536,-XX:MaxTenuringThreshold=0就是去掉了救助空间; -Xnoclassgc禁用类垃圾回收,性能会高一点; -XX:+...DisableExplicitGC禁止System.gc(),免得程序员误调用gc方法影响性能; -XX:+UseParNewGC,对年轻代采用多线程并行回收,这样收得快; 带CMS参数的都是和并发回收相关的
-XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=15 -XX:PretenureSizeThreshold=3145728 -XX:+UseParNewGC...=20971520 -XX:SurvivorRatio=8 -XX:MaxTenuringThre shold=15 -XX:PretenureSizeThreshold=3145728 -XX:+UseParNewGC...-XX:+PrintGCTimeStamps -XX:SurvivorRatio=8 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX...参数 -XX:NewSize=5M -XX:MaxNewSize=5M -XX:InitialHeapSize=10M -XX:MaxHeapSize=10M -XX:SurvivorRatio=8...-XX:+PrintGCTimeStamps -XX:SurvivorRatio=8 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX
-XX:NewSize 新生代内存大小 -XX:SurvivorRatio Eden 区和 Survivor 区的内存比 GC 优化时最常用的参数是-Xms,-Xmx和-XX:NewRatio。...使用 -XX:PermSize 设置。 官方推荐年轻代占整个堆的 3/8。使用 -Xmn 设置。 回收器选择 JVM 给了三种选择:串行收集器、并行收集器、并发收集器。...Xmx2000m -Xmn800m -XX:PermSize=64m -XX:MaxPermSize=256m -XX:SurvivorRatio=4 -verbose:gc -Xloggc:$CATALINA_HOME...-XX:SurvivorRatio=4 SurvivorRatio 为新生代空间中的 Eden 区和救助空间 Survivor 区的大小比值,默认是 8,则两个 Survivor 区与一个 Eden 区的比值为...解决方案: 查看系统是否有使用大内存的代码或死循环;通过添加 JVM 配置,来限制使用内存: jvm-arg>-XX:-UseGCOverheadLimitjvm-arg> OutOfMemoryError
一、调优参数设置 JVM的GC日志的主要参数包括如下几个: -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的详细日志 -XX:+PrintGCTimeStamps...此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。 -XX:SurvivorRatio:新生代中Eden区域与Survivor区域的容量比值,默认值为8。...-Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails * -XX:SurvivorRatio=8 -XX:+UseSerialGC */ public class...=8 新生代中Eden区域与Survivor区域的大小比值 -XX:+UseSerialGC 在新生代和老年代中使用串行收集器,由于-verbose:gc参数对Parallel Scavenge收集器不起作用...大对象直接进入老年代 虚拟机参数为“-XX:+PrintGCDetails -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -XX:PretenureSizeThreshold
配置jvm参数让对象直接进入老年代,避免在Eden区及两个Survivor区之间来回复制,产生大量的内存复制操作。...VM参数:-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:PretenureSizeThreshold...public class OldGC { private static final int _1MB = 1024 * 1024; /** * VM参数:-verbose:gc...-Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:PretenureSizeThreshold=3145728...allocation; allocation = new byte[4 * _1MB]; //直接分配在老年代中 } public static void main(String[] args
非Stable参数(-XX),此类参数各个JVM实现会有所不同,将来可能会随时取消,需要慎重使用。...另外,控制台输出GC信息还可以使用如下命令: 在JVM的启动参数中加入-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime...当我们没有设置-XX:NewRatio=4 -XX:SurvivorRatio=8时,使用官方默认的情况如下: ?...当我们设置了-XX:NewRatio=4 -XX:SurvivorRatio=8时,情况如下: ?...保留代码占用的内存容量 -XX:ThreadStackSize=512 设置线程栈大小,若为0则使用系统默认值 -XX:+UseLargePages 使用大页面内存 行为参数 新生代GC优先于Full
领取专属 10元无门槛券
手把手带您无忧上云