垃圾收集
文章平均质量分 53
cb李先生
这个作者很懒,什么都没留下…
展开
-
判断对象是否存活算法
判断对象是否存活算法 引用计数算法 对象每当被引用一次在其头部计数器加一,引用失效,头部减一,计数器为0时代表该对象没有任何引用,视为垃圾。 缺点:无法解决循环引用问题。 可达性分析(java使用) 通过GC Roots沿引用开始搜索,没有被扫描到的即视为垃圾。 GC时常说的标记过程就是应用可达性分析算法进行标记;注,标记标记到的都是存活的对象。 java中的GC Roots 虚拟机栈中的引用的对象 常量池中的引用(jdk7及以前中的String对象全部分配在StringPool中,jdk8开始的原创 2020-06-10 23:43:49 · 172 阅读 · 0 评论 -
垃圾收集器(五) G1收集器
特点 优先处理回收价值收益最大的Region(Garbage First) 逻辑分代,物理不分代 既可以回收年轻代,又可以回收老年代 保证低延迟的前提下,尽量提高吞吐量 维护一个价值列表(价值:回收所获得的空间大小以及回收所需时间的加权值) jdk9默认收集器 Region 将堆内存划分为多个Region,每个Region大小在1MB~32MB,并且应为2的N次幂 Region分为Eden,Surviver, Old, Humongous(存放大对象) 一次GC,多个Region之间使用标记整理算法,原创 2020-06-09 22:28:08 · 201 阅读 · 0 评论 -
垃圾收集器(四) CMS收集器
常见组合 Serial + CMS + SerialOld(jdk8废弃) ParNew + CMS + SerialOld ((jdk9不推荐使用,随着jdk14CMS的废弃,此方案废弃) 特点 第一款能和用户线程并发执行的垃圾收集器 作用在老年代 标记清除算法 注重低延迟 缺点 会存在与用户线程竞争cpu运算资源的情况,导致用户线程执行变慢 由于gc和用户线程并发执行,需要堆内存到达一定比例时就要开始gc,在并发标记过程中,如果与gc Root直接关联的对象成为了垃圾(也就是浮动垃圾),这个垃原创 2020-06-09 21:00:42 · 208 阅读 · 1 评论 -
垃圾收集器(三) Parallel收集器
常见组合 Parallel Scanvege + ServialOld(jdk14废弃此方案) Parallel Scanvege + Parallel Old(jdk8默认方案,jdk14现役) 特点 多线程并行收集 Parallel Scanvege标记复制算法 ,Parallel Old标记整理算法 注重吞吐量的方案 自适应策略 PP组合运行图 使用Parallel 使用Parallel: -XX:+UseParallelGC, -XX:+UseParallelOldGC,默认相互激活 并原创 2020-06-08 23:15:27 · 972 阅读 · 0 评论 -
垃圾收集器(二) ParNew收集器
常见组合 ParNew + CMS(jdk9不推荐使用,随着jdk14CMS的废弃,此方案废弃) ParNew + SerialOld(jdk8废弃) 特点 Serial的多线程并行版本(在垃圾收集时间有多个线程进行垃圾收集) 作用在新生代 采用标记复制算法 在单核心机器上效率低(涉及到多个线程争抢cpu,切换线程上下文降低效率) 运行图 使用ParNew 使用ParNew: -XX:+UseParNewGC 指定垃圾收集的线程数:-XX:ParallelGCThreads(默认为cpu核心数)原创 2020-06-08 22:42:55 · 343 阅读 · 0 评论 -
垃圾收集器(一) Serial收集器
常见组合 Serial+SerialOld(jdk14现役) Serial+CMS(jdk8开始废弃) 特点 单线程(进行gc时只有gc线程运行,所有其他线程停在安全点,STW) java client模式下的默认垃圾收集器(windows 32位默认模式) 对于单核处理 器或处理器核心数较少的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以 获得最高的单线程收集效率。 管理空间在几十兆甚至一两百兆。 Serial使用标记复制算法,SerialOld老年代使用标记整理算法原创 2020-06-08 22:28:50 · 373 阅读 · 0 评论