1. 确定垃圾
    • 引用计数(存在循环引用问题)
    • 根可达算法

  1. 常见的垃圾回收算法
    • 标记清除算法-位置不连续,产生碎片

    • 拷贝算法- 没有碎片,浪费空间

    • 标记压缩-没有碎片,效率偏低(多线程需要进行线程同步,单线程效率本来就低)

  1. JVM内存分代模型(用于分代垃圾回收算法)
    1. 部分垃圾回收器使用的模型
    2. 新生代+老年代+永久代(1.7)/元数据区(1.8)Metaspace
      1. 永久代 元数据- Class
      2. 永久代必须指定大小限制,元数据区可以设置,也可以不设置,无上限(受限与物理内存)
      3. 字符串常量 1.7在永久代,1.8在堆
      4. MethodArea(方法区)逻辑概念-指的是永久代或元数据

c. 新生代 = Eden + 2个suvivor区

      1. YGC回收之后,大多数对象会被回收,活着的进入s0
      2. 再次YGC,活着的对象eden + s0 ->s1
      3. 再次YGC,eden+s1->s0
      4. 年龄足够->老年代
      5. s区装不下->老年代

d. 老年代

      1. 顽固分子
      2. 老年代满了FGC

e. GC Tuning(Generation)

      1. 尽量减少FGC
      2. MinorGC = YGC
      3. MajorGC = FGC

  1. 常见的垃圾回收器

    1. Serial-年轻代 串行回收

b. PS-年轻代 并行回收

c. ParNew-年轻代 配合CMS的并行回收(PS和CMS不能配合使用,为了配合CMS,产生了ParNew)

d. SerialOld

e. ParallelOld

f. ConcurrentMarkSweep 老年代,垃圾回收和引用程序同时进行,降低STW的时间(200ms)

j. G1(10ms)

h. ZGC(1ms) PK C++

i. Shenandoah

g. Eplison

1.8默认的垃圾回收器: PS+ParallelOld

  1. JVM调优
    1. JVM命令行参数参考: 命令行
    2. 常用:
      1. -XX:+PrintFlagsFinal (打印所有最终生效值)
      2. -XX:+PrintFlagsInitial (打印默认值)
      3. -XX:+PrintCommandLineFlags (启动时的命令行参数)
    1. JVM参数分类
      1. 标准:-开头,所有的HotSpot都支持
      2. 非标准: -X开头,特定版本HotSpot支持特定命令
      3. 不稳定: -XX开头,下个版本可能取消

JVM(五):JVM模型与GC的更多相关文章

  1. JVM虚拟机内存模型以及GC机制

    JAVA堆的描述如下: 内存由 Perm 和 Heap 组成. 其中 Heap = {Old + NEW = { Eden , from, to } } JVM内存模型中分两大块,一块是 NEW Ge ...

  2. 深入理解JVM(五)JVM优化策略

    5.2一些案例: 1.高性能硬件部署策略: (1)背景:某公司升级了硬件(CPU升级为4核,内存增加为16G),发现不定期出现网页失去响应. (2)原因:①内存增加之后,项目中有在内存中处理文件的大对 ...

  3. 一 JVM垃圾回收模型

    一 JVM垃圾回收模型 一. GC算法 1.1 标记-清除算法(Mark-Sweep) 算法分为"标记"和"清除"两个阶段首先标记出所有需要回收的对象,然后回收 ...

  4. 关于JVM内存模型,GC策略以及类加载器的思考

    JVM内存模型 Sun在2006年将Oracle JDK开源最终形成了Open JDK项目,两者在绝大部分的代码上都保持一致.JVM的内存模型是围绕着原子性(操作有且仅有一个结果).可见性(racin ...

  5. 【转】JDK5.0中JVM堆模型、GC垃圾收集详细解析

    基本概念 堆/Heap JVM管理的内存叫堆:在32Bit操作系统上有4G的限制,一般来说Windows下为2G,而Linux下为3G:64Bit的就没有这个限制.JVM初始分配的内存由-Xms指定, ...

  6. JVM内存模型及GC回收算法

    该篇博客主要对JVM内存模型以及GC回收算法以自己的理解和认识做以记录. 内存模型 GC垃圾回收 1.内存模型 从上图可以看出,JVM分为 方法区,虚拟机栈,本地方法栈,堆,计数器 5个区域.其中最为 ...

  7. JVM 内存分配模型概念和java中各种对象的存储

    JVM 内存分配模型概念 --在工作中可能用到的机会不多,有个概念的了解 --此文是转载某位读者,应该是在阅读了<深入理解Java虚拟机JVM高级特性与最佳实践> 一书后,总结所得.写的不 ...

  8. JVM初探 -JVM内存模型

    JVM初探 -JVM内存模型 标签 : JVM JVM是每个Java开发每天都会接触到的东西, 其相关知识也应该是每个人都要深入了解的. 但接触了很多人发现: 或了解片面或知识体系陈旧. 因此最近抽时 ...

  9. JVM内存区域模型

    一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代” .“非堆” ,"perm",  它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共 ...

  10. JVM系列五:JVM监测&工具

    JVM系列五:JVM监测&工具[整理中]  http://www.cnblogs.com/redcreen/archive/2011/05/09/2040977.html 前几篇篇文章介绍了介 ...

随机推荐

  1. 【API进阶之路】用API打造一条自动化内容生产流水线

    摘要:搞定了内容审核之后,我又把抓取工具.内容审核API.文本摘要生成API串联在一起,从抓到审再到编,建立了一条自动化的内容生产流水线,编辑团队只需要做优质内容的推荐就可以了. 上周,运营部将官网上 ...

  2. shell 文件判断

    文件判断参数 -e,文件是否存在 -f,文件存在且为普通文件 -d,文件存在且为文件夹 #!/bin/bash [ -e test.sh ] && echo "test.sh ...

  3. Go语言 | 并发设计中的同步锁与waitgroup用法

    今天是golang专题的第16篇文章,我们一起来聊聊golang当中的并发相关的一些使用. 虽然关于goroutine以及channel我们都已经介绍完了,但是关于并发的机制仍然没有介绍结束.只有go ...

  4. Euclid's Game(POJ 2348)

    原题如下: Euclid's Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10832   Accepted: 4 ...

  5. C、算法、操作系统杂记《malloc 0大小是什么行为》

    linux手册上的说明 If size is 0, then malloc() returns either NULL, or a unique pointer value that can late ...

  6. 苏大文正节点一 ORA-00603 ORA-27504 ORA-27300 ORA-27301 ORA-27302 BUG

      Problem Description --------------------------------------------------- Tue Sep 01 04:05:33 2020 s ...

  7. SSTI服务器模板注入(以及关于渲染,solt的学习)&&[BJDCTF2020]The mystery of ip 1

    ssti服务器模板注入 ssti:利用公共 Web 框架的服务器端模板作为攻击媒介的攻击方式,该攻击利用了嵌入模板的用户输入方式的弱点.SSTI 攻击可以用来找出 Web 应用程序的内容结构. slo ...

  8. .NETCore在析构函数(Finalize)在Linux下引起程序异常退出现象

    目       录 1.      现象概述... 1 2.      操作数据库的代码... 2 3.      引起的异常... 2 4.      异常信息分析... 3 5.      分析结 ...

  9. Cesium系统学习整理(一)

    (一)Cesium的概念定义 Cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎.Cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区域,并提供良好的 ...

  10. 抛弃vue-webpack-template,踩坑Vue-Cli创建vue项目

    官方指导网站https://cli.vuejs.org/ 一.全局安装@vue/cli //本人包管理工具使用yarn yarn global add @vue/cli 安装完成 二.创建vue项目 ...