垃圾回收算法:
名称 | 介绍 | 缺点 | 适用场景 |
标记清除 | 标记垃圾对象后清除 | 产生内存碎片,不利于下次GC分配内存,以及垃圾对象的清除 | 老年代垃圾回收,老年代垃圾对象少 |
复制 | 将一半内存中的存活对象复制到另一半当中,清除垃圾对象 | 内存利用率降低,当大量对象存活时,复制性能很低 | 新生代垃圾回收,新生代存活对象少 |
标记整理 | 标记垃圾对象并清除后,还会整理内存空间 | 需要维护对象指针引用,耗费额外的性能 | 一般用于老年代和内存吃紧的情况 |
垃圾收集器分为两大类:
分代收集 |
|
||||||||||||||||||
分区收集 |
|
垃圾回收器收集主要过程
配合使用 | jvm参数 | 线程 | 过程 | 优点 | 缺点 | |||||||||||||||
serial + serial Old |
-XX:+UseSerialGC -XX:+UseSerialOldGC |
单GC线程 |
垃圾回收过程由单线程执行,STW(停止用户线程) |
简单高效 | STW用户体验不好 | |||||||||||||||
parallel + parallel Old |
-XX:+UseParallelGC -XX:+UseParallelOldGC |
多GC线程 |
垃圾回收过程由多线程并发执行,STW,jdk8默认使用 |
吞吐高,cpu利用高,可精准控制 | 用户体验不好 | |||||||||||||||
parNew + CMS |
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC |
多GC线程 |
垃圾回收过程如下
在并发失败情况下(GC还在执行,但是新的对象还在产生导致内存不够用),会STW并由serial Old代替CMS处理 |
用户体验好,吞吐量高 | 对cpu资源敏感,无法收集浮动垃圾,容易产生大量内存碎片(可配置jvm参数在清除后整理解决) |
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
//冒泡排序,学习数组传参要注意的点和如何优化一段代码 #include void line(int arr[],int b) { //int b=sizeof arr/sizeof arr[0]; for (int i = 0;i //这里的i应该设置为s…