文档章节

垃圾回收

业余编程人士
 业余编程人士
发布于 2017/05/30 17:18
字数 917
阅读 15
收藏 0

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

 

© 著作权归作者所有

下一篇: 小记录2-工作
业余编程人士
粉丝 5
博文 19
码字总数 9137
作品 0
其他
程序员
私信 提问

暂无文章

为什么要在网站中应用CDN加速?

1. 网页加载速度更快 在网站中使用CDN技术最直接的一个好处就是它可以加快网页的加载速度。首先,CDN加速的内容分发是基于服务器缓存的,由于CDN中缓存了不少数据,它能够给用户提供更快的页...

云漫网络Ruan
21分钟前
2
0
亚玛芬体育(Amer Sports)和信必优正式启动合作开发Movesense创新

亚玛芬体育和信必优正式启动合作开发Movesense创新,作为亚玛芬体育的完美技术搭档,信必优利用Movesense传感器技术为第三方开发移动应用和服务。 Movesense基于传感器技术和开放的API,测量...

symbiochina88
32分钟前
2
0
创龙TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA核心板规格书

SOM-TL437xF是一款广州创龙基于TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA芯片设计的核心板,采用沉金无铅工艺的10层板设计,适用于高速数据采集和处理系统、汽车导航、工业自动化等领...

Tronlong创龙
33分钟前
2
0
好程序员Java学习路线分享MyBatis之线程优化

  好程序员Java学习路线分享MyBatis之线程优化,我们的项目存在大量用户同时访问的情况,那么就会出现大量线程并发访问数据库,这样会带来线程同步问题,本章我们将讨论MyBatis的线程同步问...

好程序员官方
38分钟前
6
0
IDEA 自定义方法注解模板

IDEA 自定义方法注解模板 1、使用效果 /*** 计算交易费用* @Author wangjiafang* @Date 2019/9/11* @param feeComputeVo* @return*/@PostMapping("/v1/fee_compute")public ApiResp......

小白的成长
39分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部