马士兵JVM课程笔记

GC和GC Tuning

GC的基础知识

1.什么是垃圾

C语言申请内存:malloc free

C++: new delete

c/C++ 手动回收内存

Java: new ?

自动内存回收,编程上简单,系统不容易出错,手动释放内存,容易出两种类型的问题:

  1. 忘记回收
  2. 多次回收

没有任何引用指向的一个对象或者多个对象(循环引用)

2.如何定位垃圾

  1. 引用计数(ReferenceCount)
  2. 根可达算法(RootSearching)

3.常见的垃圾回收算法

  1. 标记清除(mark sweep) - 位置不连续 产生碎片 效率偏低(两遍扫描)

    1.标记清除(Mark-Sweep)

    老年代一般是由标记清除或者是标记清除与标记整理的混合实现

    • 原理

    当堆中的有效内存空间(available memory)被耗尽的时候,就会停止整个程序(也被称为stop the world),然后进行两项工作,第一项则是标记,第二项则是清除。

    标记:从引用根节点开始标记所有被引用的对象。标记的过程其实就是遍历所有的GC Roots,然后将所有GC Roots可达的对象 标记为存活的对象。

    清除:遍历整个堆,把未标记的对象清除。

    缺点:此算法需要暂停整个应用,会产生内存碎片

    用通俗的话解释一下标记/清除算法,就是当程序运行期间,若可以使用的内存被耗尽的时候,GC线程就会被触发并将程序暂停,随后将依旧存活的对象标记一遍,最终再将堆中所有没被标记的对象全部清除掉,接下来便让程序恢复运行。

    • 劣势

    1、首先,它的缺点就是效率比较低(递归与全堆对象遍历),而且在进行GC的时候,需要停止应用程序,这会导致用户体验非常差劲

    2、其次,主要的缺点则是这种方式清理出来的空闲内存是不连续的,这点不难理解,我们的死亡对象都是随即的出现在内存的各个角落的,现在把它们清除之后,内存的布局自然会乱七八糟。而为了应付这一点,JVM就不得不维持一个内存的空闲列表,这又是一种开销。而且在分配数组对象的时候,寻找连续的内存空间会不太好找。

  2. 拷贝算法 (copying) - 没有碎片,浪费空间
  3. 标记压缩(mark compact) - 没有碎片,效率偏低(两遍扫描,指针需要调整)

http://www.taodudu.cc/news/show-3029363.html

相关文章:

  • 马士兵学习笔记-Java基础网络编程
  • CorelDRAW X3中文版服装创意设计视频教程
  • coreldrawX6实例视频教程
  • corelDRAW制作笔
  • 《CorelDraw》课程标准
  • coreldraw凹槽_CATIA课时:操作工具栏创建修剪分割曲面视频教程_翼狐网
  • corelDRAW视频教程
  • CorelDRAW X4中文版高清实例视频教程
  • 如何使用CorelDRAW 2019绘制谷歌浏览器Logo
  • coreldraw怎么画猴子_小猴头像简笔画【CDR11设计制作逼真的小猴头像实例教程】...
  • CorelDRAW看了这个实例教程保证上你对海报制作有新的认识
  • CorelDRAW 折扇效果实例教程学会了就顶学几年了
  • coreldraw课表设计作品_平面设计软件的详细资料来了~看看有你常用的吗?
  • coreldraw怎么画猴子_用CorelDraw制作一个可爱的调皮猴子
  • CorelDraw 课程标准
  • 新版CorelDRAW Technical Suite2022最新详细功能介绍
  • html中绘制渐变伞,CorelDRAW X8快速制作雨伞教程
  • coreldraw插件编写
  • 可汗学院统计学二
  • 可汗学院统计学一
  • 可汗学院统计学笔记
  • 组队学习可汗学院统计学1
  • 可汗学院学习总结(一)
  • 方差分析 可汗学院统计学 笔记
  • 可汗学院统计学 task4
  • 可汗学院统计学 task 3
  • 可汗学院统计学笔记1
  • 翻转课堂的可汗学院
  • 可汉学院python_18-04-18 回顾 可汗学院:计算数论
  • 可汉学院python_A可汗学院-统计学python实现1-10

马士兵JVM课程笔记相关推荐

  1. 马士兵mca课程java学习笔记

    马士兵mca课程java学习笔记 大四毕业刚买了马士兵的mca架构课程,包括java从小白到大神的基础工程师课程,左程云左老师的算法与数据结构,mca架构课和大数据架构课.马老师的课程内容实在是太多了 ...

  2. 马士兵Hibernate学习笔记

    马士兵hibernate学习笔记 课程内容 6课程内容 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0 ...

  3. 黑马jvm课程笔记d1

    目录 一.堆内存相关 1.1.定义 1.2堆内存溢出 1.2.1 堆内存内存诊断工具 二.方法区相关 2.1.方法区组成 2.2.方法区内存溢出 2.3.方法区内常量池 2.4.运行时常量池 三.St ...

  4. 马士兵JVM 精讲笔记(一)

    本文和后文中讲的都是32位机,也就是i386的系统 计算机语言(机器语言)可以通过0和1生成机器指令,将指令输入到cpu 来执行,通过机器指令计算机可以实现各种各样的功能,而机器语言又分为操作码和操作 ...

  5. 马士兵—JVM—内存溢出—1.线上OOM(内存溢出)问题排查——亲测

    1. 模拟线上oom问题 1.1 代码 @GetMapping("/addList")public void addList(){List list = new ArrayList ...

  6. 马士兵java教程笔记_马士兵java教程笔记4

    File 类 Java.io.File 类代表系统文件名 File类的常见构造方法: Public File(String pathname)以pathname为路径创建File对象,如果pathna ...

  7. 马士兵—JVM—内存溢出—2.arthas阿里线上Java诊断工具

    参考文档 阿里官方文档 https://arthas.aliyun.com/doc/en/quick-start.html 使用方法 1. 生成dump文件. heapdump /root/1.hpr ...

  8. java马士兵笔记_马士兵java教程笔记4

    File 类 Java.io.File 类代表系统文件名 File类的常见构造方法: Public File(String pathname)以pathname为路径创建File对象,如果pathna ...

  9. 马士兵 java 学习笔记_马士兵java教程笔记1

    ---恢复内容开始--- 前记 虽然已经是个研究生了,但是会的东西还是特别的少 甚至连java都不能说是很会 所以准备从现在开始能好好的学习java 变成java master 标识符 标识符是由字母 ...

最新文章

  1. 3行代码就能可视化Transformer的奥义 | 开源
  2. (转) oc static extern 和const
  3. 结对编程 黄金点游戏
  4. Android使用Intent实现拨打电话的动作
  5. Java中throw和throws的区别
  6. C#中不同窗口之间传递值的两种方法
  7. 支付宝回应手机黑产;微软将允许员工永久在家办公;Flutter 1.22 正式发布|极客头条
  8. 对VLAN,TRUNK,VTP和CHANNEL实验总结
  9. 如何安装python3.6_python3.6环境下如何安装freetype库和基本使用方法
  10. 记录家庭会议内容思维导图模板分享
  11. 天涯明月刀手游服务器维护中,《天涯明月刀手游》12月17日服务器维护更新公告...
  12. mysql5.7卸载_MySQL 5.7版本卸载教程
  13. Windows10 1809版本下载地址
  14. Android Lost RAM的统计方法
  15. 色彩校正(CCM)和伽马校正(Gamma)
  16. 7⽂件查找和压缩问题和练习
  17. 腾讯会议后台研发效能提升之路
  18. c# try catch 用法
  19. 3.Ray-Event编写
  20. 计算机基础教程张福炎pdf,计算机基础教学大纲(理科).pdf

热门文章

  1. 送给广大IT男同学的金句良言
  2. 用MATLAB做周期三角波的傅里叶级数,Matlab 周期方波信号傅里叶级数展开
  3. 基于MATLAB的神经网络进行手写体数字识别(含鼠绘GUI / 数据集:MNIST)
  4. 【节目单】科幻春晚,陪你过年!
  5. 算法复杂度及渐进符号
  6. 南京那边可以学计算机绘画,电脑画画软件有哪些?推荐几款可以教画画的app
  7. 解决Webstorm通过Chrome无法调用JB插件调试的问题
  8. Build a web app fast: Python, HTML JavaScript resources
  9. 计算机打开共享网络连接打印机共享打印机,两台电脑如何共享打印机 多台电脑共享一台打印机设置方法【详细教程】...
  10. 【不就是java设计模式吗】设计模式七大原则,用代码对比方式,化抽象为具体,实打实的教会你