什么是GC?

GC(Garbage Collection)称之为垃圾回收,在JVM的执行引擎中自带这样的一个GC系统,此系统会按照一定的算法对内存进行监控和垃圾回收。

如何判断哪些对象是垃圾?

1、引用计数法:每个对象中应该有一个计数器。只要有引用引用着这个对象,这个对象的引用就会加1,没有引用这个计数器的值就是0,当计数器的值为0时,就说明这个对象是垃圾对象。

      缺点:可能存在相互引用,循环引用的对象不能被及时回收。

2、可达性分析:是否可以通过GC Root对象找到这个对象,找不到就认为是垃圾对象。

      缺点:对象引用链越长,对象的查找效率相对慢一些。

你知道哪些常用的GC算法?

1、标记清除算法(扫描内存,对活着的对象进行标记,再次扫描内存,对未标记的对象进行清除)

2、标记复制算法(扫描内存,将活着的对象标记同时拷贝到一块空闲区域,然后将原有的内存全部清空)

3、标记整理算法(扫描内存,将活着的对象向一侧移动,然后将边界外的内存进行清空)

JVM执行GC时的线程策略?

1、串行(整个GC过程,只有一个回收垃圾线程执行)

2、并行(允许多线程利用多核CPU优势并行GC)

3、并发(允许GC线程和业务线程并发执行)

JVM中有哪些常用的垃圾回收器?

1、Serial(串行垃圾回收器)

2、Parallel(并行垃圾回收器)

3、CMS(并发垃圾回收)

4、G1(基于大内存的并发垃圾回收)

Serial收集器的特点?

1、内部只使用一个线程进行垃圾回收,不能执行并行化(不能充分利用多核CPU优势),但是响应速度较快。

2、GC时所有正在执行的业务的线程都要暂停(Stop The World-STW)

3、新生代使用标记复制算法,老年代使用标记整理算法。

应用:-XX:+UseSerialGC

Parallel收集器的特点?

1、内部有多个线程进行垃圾回收,可以利用多核CPU优势进行并行GC操作,可以减少GC暂停时间,但是响应速度较慢,影响用户体验。

2、GC时所有正在执行的业务线程都要暂停(Stop The World -STW)

3、新生代使用标记复制算法,老年代使用标记整理算法。

应用:-XX:+UseParallelGC

CMS(Concurrent Mark and Sweep)收集器的特点?

1、内部有多个线程进行垃圾回收,可以利用多核CPU优势进行并行GC操作,可以减少GC暂停时间。

2、用户线程和GC线程可以并发执行,GC执行时在初识标记和修正标记阶段会STW,暂停时间比较短。

3、新生代使用的是标记复制算法,老年代使用的是标记清除算法(不整理内存,响应速度会更快),相对于标记整理算法,这个算法响应速度会更快(用户体验会更好)。

4、CMS底层采用了三色标记法(黑色、灰色、白色),标记过程中可能会产生漏标、错标现象。

应用:-XX:+UseConcMarkSweepGC

G1(Garbage-First)收集器的特点?

1、工作于服务器模式,主要面向多核、大内存的服务器应用。

2、整个堆不再分为连续的年轻代和老年代,而是划分为了多个小堆区。

3、GC时不会每次收集整个堆,而是以增量方法进行GC操作,每次只是对一小堆去进行GC。

4、更加可控的暂停时间,更大的吞吐量,更少的碎片。需要运行在更大的内存上(>=64G),消耗的整体资源会比较多,底层采用三色标记法进行对象标记,此过程会有漏标现象,但漏标的概率要比CMS要好。

5、年轻代使用标记复制算法,老年代使用标记整理算法。

应用:-XX:+UseG1GC

JVM如何调优?

1、为什么调优?

降低系统宕机风险

2、调优的目标?

减少GC次数,提高吞吐量和响应速度,改善用户体验。

3、调优的方案?

更换CPU,内存、调内存大小、比例参数、调整GC收集器。

JVM常用参数分析

检查类异常

-XX:+TraceClassLoading

方法区参数配置

-XX:MetaspaceSize

-XX:MaxMetaspceSize

常用堆参数配置

-Xms2048m(设置初始堆大小为2048m)

-Xmx2048m(设置最大堆大小为2048m)

-Xmn1g(设置年轻代大小为1g)

-XX:NewRatio=4(设置年轻代与老年代的比例大小)

-XX:SurvivorRatio=4(设置年轻代中的Eden区与Survivor区比值,这个的4表示4:1:1)

-XX:MaxTenuringThreshold=15(设置年轻代对象转换为老年代对象最大年龄值,默认值是15)

常用栈参数配置

-Xss128k(设置每个线程的栈大小)

GC日志参数配置

-XX:+PrintGC

-XX:+PrintGCDetail

JVM中的GC系统的更多相关文章

  1. 浅析JVM中的GC日志

    目录 一.GC日志的格式分析 二.运行时开启GC日志 一.GC日志的格式分析 在讲述GC日志之前,我们先来运行下面这段代码 package com.example; public class Test ...

  2. JVM中的GC算法,JVM参数,垃圾收集器分类

    一.在JVM中什么是垃圾?如何判断一个对象是否可被回收?哪些对象可以作为GC Roots的根 垃圾就是在内存中已经不再被使用到的空间就是垃圾. 1.引用计数法: 内部使用一个计数器,当有对象被引用+1 ...

  3. 「每日五分钟,玩转 JVM」:GC 概览

    前言 GC(Garbage Collection)是我们在学习 JVM 的过程中不可避免的一道坎,接下来,我们就来系统的学习一下 GC. 做一件事情之前,我们一定要去知道我们为什么要去做,这里不仅仅指 ...

  4. JVM学习笔记——GC算法

    GC 算法 GC 即 Garbage Collection 垃圾回收.JVM 中的 GC 99%发生在堆中,而 Java 堆中采用的垃圾回收机制为分代收集算法.即将堆分为新生代和老年代,根据不同的区域 ...

  5. 在JVM中,新生代和旧生代有何区别?GC的回收方式有几种?server和client有和区别?

    在JVM中,新生代和旧生代有何区别?GC的回收方式有几种?server和client有和区别? 2014-04-12 12:09 7226人阅读 评论(0) 收藏 举报  分类: J2SE(5)  一 ...

  6. jvm中的年轻代 老年代 持久代 gc

    虚拟机中的共划分为三个代:年轻代(Young Generation).老年代(Old Generation)和持久代(Permanent Generation).其中持久代主要存放的是Java类的类信 ...

  7. 如何诊断RAC系统中的'gc cr multi block request'?

    'gc cr multi block request' 是RAC数据库上比较常见的一种等待事件,在RAC 上进行全表扫描(Full Table Scan)或者全索引扫描(Index Fast Full ...

  8. JAVA中的GC机制详解

    优秀Java程序员必须了解的GC工作原理 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只 ...

  9. 《深入Java虚拟机学习笔记》- 第7章 类型的生命周期/对象在JVM中的生命周期

    一.类型生命周期的开始 如图所示 初始化时机 所有Java虚拟机实现必须在每个类或接口首次主动使用时初始化: 以下几种情形符合主动使用的要求: 当创建某个类的新实例时(或者通过在字节码中执行new指令 ...

  10. 改变JVM中的参数以提高Eclipse的运行速度

    首先建立评估体系,将workspace里所有的项目close掉,关闭eclipse.优化的用例就是启动eclipse,open一个项目,eclipse会自动build这个项目,保证没有感觉到明显的卡, ...

随机推荐

  1. 题解 [HAOI2007]分割矩阵

    % 你赛考到了,看到如此之小的数据范围,想到考前每次都被状压 dp 吊起来打的惨痛经历,第一反应就是状压. 然后发现横竖切这个不太好记录就摆了去看 T2,然后没想到这么简单. 令 \(f_{a, b, ...

  2. grafana展示的CPU利用率与实际不符的问题探究

    问题描述 最近看了一个虚机的CPU使用情况,使用mpstat -P ALL命令查看系统的CPU情况(该系统只有一个CPU core),发现该CPU的%usr长期维持在70%左右,且%sys也长期维持在 ...

  3. .Net6 微服务之Ocelot+IdentityServer4入门看这篇就够了

    前言 .Net 6 使用 Consul 实现服务注册与发现 看这篇就够了.Net6 使用 Ocelot + Consul 看这篇就够了.Net6 微服务之Polly入门看这篇就够了 书接上文,本文将继 ...

  4. Chai 3D之创建项目

    推荐:将 NSDT场景编辑器 加入你的3D开发工具链 1.构建应用目录   我们将设置使用 CHAI3D 构建应用程序所需的基本目录结构和文件.根据您可能要使用的显示器或 GUI 库,为 FreeGL ...

  5. select去除默认样式

    select { /*Chrome同Firefox与IE里面的右侧三角显示的样式不同*/ border: solid 1px #ddd; /*将默认的select选择框样式清除*/ appearanc ...

  6. CF837G - Functions On The Segments

    我们考虑 \(\sum_{i=l}^r{f_i(x)}\) 是个什么东西.首先这个奇怪的东西很好离线做,所以尽管题目要求强制在线,我们还是离线下来试试. 我们发现,我们可以 \(x\) 坐标从 \(1 ...

  7. python基础语法图

  8. python flask后端request获取参数的几种方式整理

    最近用 flask 写后端,将获取访问参数的几种方式总结整理一下,仅供参考 从 postman 上来看,调用后端接口传参的方式有两种,一种是 params,参数是以?a=x&b=y 的形式显示 ...

  9. 深入解读.NET MAUI音乐播放器项目(三):界面交互

    UI设计的本质是对于产品的理解在界面中多种形式的映射,当需求和定位不同时,对相同的功能表达出了不同的界面和交互方式. 作为播放器,界面可以是千差万别的.<番茄播放器>的iOS平台上我开发了 ...

  10. Canvas:绘制失败的问题

    beginPath 绘制路径必须添加 beginPath().它标志着一个画笔在画布中哪个地方开始画起.没有它,新起的画笔位置必定与上一次画笔结束的位置相连. // 第一个半圆 ctx.arc(60, ...