〇、前言

简历写上:熟悉GC常用算法,熟悉常见垃圾回收器、具有实际JVM调优实战经验

瞬间涨3k

一、什么是garbage

Java中垃圾回收器自动进行垃圾回收,不用自己回收

new 对象在内存中,c++/c手动删除,而java无需要写代码

判断什么是垃圾:

方法1:有无引用指向--reference count,是有问题的,无法解决循环引用(引用计数在Python中有使用)

方法2:从根上能找到的对象,即从main函数能找到的对象--根可达算法

二、GC算法-找到垃圾如何清除(提出五十多年未变过)

1、标记清除算法Mark-Sweep

缺陷:碎片化现象很严重

2、拷贝算法Copying

无论空间多大,全部空间一分为二

在某一个空间内调用程序,当程序调用结束,选择有用的对象,放到另一半

并将当前部分的那些没有用的对象,全部回收

优势:效率高,一次性清除很大的空间

缺陷:浪费空间,有一半用不了

3、标记整理Mark-Compact

标记的同时,把有用的对象排到前面

一边找,一遍标记,一边整理

三、垃圾回收器Garbage Collector

1、概述图示

用虚线连接,表示两个垃圾回收器有联系,可以配合使用

往往是上下配对

2、最古老的垃圾回收器:Serial-连续的,序列的,单线程的

Serial:单线程,Stop-the-world,简称STW,进行垃圾回收的时候,业务线程全部停止

垃圾回收开始干活,java程序变卡

对网站的影响:对用户的反馈不友好,容易出现卡顿现象

调优:STW的时间要短,让用户迅速得到反馈

3、内存变大时,可以多加几个线程-Parallel Scavenge(并行)

线程数量可以增多,但不能无限增多

当内存很多时,进行STW,仍然会浪费很多时间,多线程卡顿时间也会变长

实际1.8生产环境默认:PS+PO

Oracle jdk11收费,Open Jdk免费

调优:可以使用G1(jdk1.9后的默认)

4、Concurrent Mark Sweep,CMS-并发

(1)什么是并发:当垃圾回收线程和正在工作的线程同时开始工作时,叫做并发

一边丢线团,一边清理线程

小线团就是new出来的多个对象

从CMS之后都是并发

(2)存在的问题1

小线团之间会存在关联,过程很乱

业务线程不断运行,将其标记为不是垃圾,但下一秒就变成垃圾了,不再有引用

而垃圾回收线程从根上寻找时,两个线程在不同的CPU上运行,但垃圾回收却将其标记为有用,不会将其作为垃圾进行回收

会产生浮动垃圾:垃圾在这次回收中没有被清理掉,只能在下次回收

(3)存在的问题2

回收时标记为垃圾

但工作线程将其与现有对象建立连接

被回收后,再去访问,得到的是空值

(4)怎么建立连接-找到没有引用的对象

是算法带来的问题

标记过程分为多个阶段,标记完后会继续--三色标记算法

【JVM调优】Day01:Garbage的概念、垃圾回收的算法(标记清除、拷贝、标记压缩)、各种垃圾回收器(Serial、Parallel、CMS并发)及存在的问题的更多相关文章

  1. [转]JVM调优总结:一些概念

    JVM调优总结:一些概念 原文出处: pengjiaheng 数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变 ...

  2. JVM调优总结:一些概念

    数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本身, ...

  3. jvm 调优(1)概念

    数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本身, ...

  4. JVM调优基础到进阶

    GC和GC Tuning GC的基础知识 1.什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? 自动内存回收,编程上 ...

  5. JVM调优的几种策略

    一.JVM内存模型及垃圾收集算法  1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) 永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从J ...

  6. JVM调优方法

    目 录 目 录 I 诠释JVM调优 1 第1章 JVM内存模型及垃圾收集算法 1 1.1 根据Java虚拟机规范,JVM将内存划分为 1 1.2 垃圾回收算法 1 第2章 内存泄漏及解决方法 2 2. ...

  7. JVM调优总结(九)-新一代的垃圾回收算法

    垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限.但是他无法解决的一个问题,就是Full GC所带来的应用暂停.在一些对实时性要 ...

  8. java虚拟机学习-JVM调优总结-新一代的垃圾回收算法(11)

    垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限.但是他无法解决的一个问题,就是Full GC所带来的应用暂停.在一些对实时性要 ...

  9. java虚拟机学习-JVM调优总结-分代垃圾回收详述(9)

    为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对象, ...

  10. JVM调优总结(4):分代垃圾回收

    为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对象, ...

随机推荐

  1. redis cluster 6.2集群

    redis最新版本:redis-6.2.1.tar.gz 安装的版本是redis-6.0.3 采用的主机: djz-server-001 192.168.2.163 7001,7002,Admin@1 ...

  2. 使用docker-compose部署Django项目

    先从最基本的功能开始 在一切工作开始前,需要先编辑好三个必要的文件. 第一步,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 Dockerfile 文件来指定 ...

  3. Alertmanager结合Slack使用

    Slack作为一款即时通讯工具,协作沟通主要通过Channel(平台)来完成,用户可以在企业中根据用途添加多个Channel,并且通过Channel来集成各种第三方工具. 例如,我们可以为监控建立一个 ...

  4. 基于python的端口扫描

    前言 端口扫描是指某些别有用心的人发送一组端口扫描消息,试图以此侵入某台计算机,并了解其提供的计算机网络服务类型(这些网络服务均与端口号相关).端口扫描是计算机解密高手喜欢的一种方式.攻击者可以通过它 ...

  5. [基础]VS Code 基础操作 命令符

    一.五种运行方式 1.点击IIS Express运行 实际上它开的是一个IIS Express服务器,就是说有一个小的代理服务器帮咱们运行,运行后就会启动一个IIS Express小型服务器,启动之后 ...

  6. PHP全栈开发:在本机上创建虚拟主机与域名

    如何在windows+wamp环境上进行自己创建的网站的域名访问 step 1 在wamp的安装目录,如C:\wamp64\www\下创建自己的网站目录pe step 2 右键wamp图标,在wamp ...

  7. BZOJ3732 Network(Kruskal重构树)

    Kruskal重构树的模板题. 给你N个点的无向图 (1 <= N <= 15,000),记为:1-N.图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: ...

  8. day48-JDBC和连接池04-2

    JDBC和连接池04-2 10.数据库连接池 10.5Apache-DBUtils 10.5.1resultSet问题 先分析一个问题 在之前的程序中,执行sql语句后返回的结果集存在如下问题: 关闭 ...

  9. 驱动开发:内核枚举Minifilter微过滤驱动

    Minifilter 是一种文件过滤驱动,该驱动简称为微过滤驱动,相对于传统的sfilter文件过滤驱动来说,微过滤驱动编写时更简单,其不需要考虑底层RIP如何派发且无需要考虑兼容性问题,微过滤驱动使 ...

  10. JUC(7)四大函数式接口

    文章目录 1.四大函数式接口(必须掌握) 1.1 function 1.2 Predicate 1.3 Consumer 1.4 Supplier 1.四大函数式接口(必须掌握) 1.lambda表达 ...