博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
垃圾回收
阅读量:6871 次
发布时间:2019-06-26

本文共 2767 字,大约阅读时间需要 9 分钟。

hot3.png

Parallel Scavenge 收集器 = “吞吐量优先” 收集器

此收集器是尽可能缩短垃圾回收的时间,eg: 从10秒收集10MB 到 5秒收集6MB,收集更加频繁

-XX:MaxGCPauseMillis   // 最大垃圾回收停顿时间, >0,=垃圾回收速度,但速度快了 收集量也少了。-XX:GCTimeRatio  //吞吐量时间限制 or 收集量时间限制(运行代码时间 / (运行代码时间 + GC时间))100> x >0, 垃圾回收时间占总时间的比率 = 吞吐量的倒数,默认为99,eg : -XX:GCTimeRatio=19 则:若MaxGCPauseMillis =1, 1/(1+19)= 5%,//最大的GC时间最大只能占总时间的5%,限制死!默认为1%。{     -Xmn //手动指定新生代大小     -XX: SurviorRatio // 手动指定Eden 与 Survior比例     -XX:PretenureSizeThreshold //手动执行晋升老年代的年龄}-XX:+UseAdaptiveSizePolicy //自动动态分配上面三项基本项-Xmx //设置最大堆大小

CMS收集器

Concurrent Mark Sweep = 并发标记擦除,尽可能缩短回收时间,比上面的力度大很多。

缺点:与应用程序抢占CPU资源很厉害,收集结束有大量碎片。

-XX:CMSInitiatingOccupancyFraction //回收触发百分比,越高越好 用于提高回收量 降低回收次数 太高也不好 最好80%。-XX:+UseCMSCompactAtFullCollection // CMS顶不住要Full GC时候 自动碎片合并,默认开启的。-XX:+PrintGCDetails // 打印GC日志

G1收集器

垃圾回收不再分代,而是把整个JVM划分均等Region,然后去各个Region回收。

-XX:+UseG1GC //启用 G1 回收器-XX:G1NewSizePercent // Young Generation 占 整个堆的大小 默认5%-XX:G1MaxNewSizePercent // Yong Generation 最大占 整个堆的大小 默认 60%-XX:+G1SummarizeRSetStats // 打印G1时JVM 调试信息-XX:+G1TraceConcRefinement //打印G1时JVM日志

Eden Space

Jvm区域总体分两类,heap区和非heap区。

heap区又分:Eden Space(伊甸园)、Survivor Space(S0,S1)(幸存者区)、Tenured Gen(老年代-养老区)。

非heap区又分:Code Cache(代码缓存区)、Perm Gen(永久代)、Jvm Stack(java虚拟机栈)、Local Method Stack(本地方法栈)

-XX: NewSize // Yong Generation 大小,建议整个堆1/3-XX:MaxNewSize // Yong Generation 最大大小-XX: SurvivorRatio  // 设置 Eden 与 Survivor 比例,默认 8:1-XX:+PrintTenuringDistribution  // 打印每次 Minor GC后 Survivor 中对象大小

STW(Stop The World)

Java运行过程中 突然全部进程停止 只有GC在运行的情况。

-Xss  // 设置每个线程能用的Heap大小 eg -Xss128k-XX:+PrintGCDetails // 打印GC详细信息-XX:+PrintGCDateStamps // 打印的时候显示时间-XX:+PrintHeapAtGC // 在每次GC前 显示Heap中对象的状态-Xloggc:./gclogs // 将 GC 输出到日志文件中

GC日志

Tenured: 老年代,   Perm: 永久代 = 方法区 比老年代还久 不容易被回收。Minor GC :发生在Young Generation的GC。Full GC: 发生在Old Generation的GC,比Minor GC用时慢10倍。//Yong generation 在不通收集器日志名不同:DefNew : Default new generation 在 Serial收集器中名字。ParNew: Parallel New Generation 在ParNew收集器中的名字。PSYoungGen: 在 Parallel Scavenge收集器中的名字。// 组合拳: -Xmn20M // Java Heap大小为20M-Xmx10M // 10M分给Yong Generation -Xmn10M // 10M分给Old Generation-XX:SurvivorRatio=8 // 设置Eden 与 Survivor 比例 8:1-verbose:gc  // 输出JVM GC详情,放在参数第一个。// 进入老年代3条途径:-XX:MaxTenuringThreshold=15 // 在 survivor 中待到15岁 进入Old Generation-大对象直接进入Old Generation,eg: //很长的字符串 或 byte array -同年2个或多个对象和达到Survivor空间一半,即使没到15岁也自动进入Old Generation

JAVA中查看GC

byte[] array = new byte[300*1024*1024];for(MemoryPoolMXBean memoryPoolMXBean: ManagementFactory.getMemoryPoolMXBeans()){    System.out.println(memoryPoolMXBean.getName());    System.out.println(memoryPoolMXBean.getUsage().getUsed());}
// 获取所有JVM参数信息java -XX:+PrintVMOptions -XX:+AggressiveOpts -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal  -version

 

转载于:https://my.oschina.net/Business/blog/911351

你可能感兴趣的文章
数字格式化函数
查看>>
Python入门学习路径图(2019最新版)
查看>>
mysql创建用户并授权
查看>>
内存优化思路
查看>>
简单的文字转语音方法,一分钟学会
查看>>
Python 数据库操作 SQLAlchemy
查看>>
UI交互设计的网站
查看>>
Python 工匠:编写地道循环的两个建议
查看>>
微信域名网址检测
查看>>
电话机器人,什么价格才是好的机器人
查看>>
我的友情链接
查看>>
Android中自定义样式与View的构造函数中的第三个参数defStyle的意义
查看>>
Eclipse中提高Android SDK Manager下载速度方法
查看>>
五、Storm入门之Bolt
查看>>
web开发插入数据时控制台没报错,可能是数据库表被锁了
查看>>
数据库中间件__mycat
查看>>
三、NGINX的配置与优化
查看>>
python_day11のPython操作 pymysql && SQLAchemy
查看>>
openstack运维实战系列(十六)之ceph存储安装
查看>>
远程桌面RDP报错CredSSP encryption oracle remediatation
查看>>