记得第一次总结java 的GC的时候,是刚开始在课堂上学习GC的时候,那时候许老师第一节java课

课后老师说同学们可以去深入理解一下java的GC机制;

但是是花费了三四个小时,翻看了《Thinking In Java》,清晰的记得是90页,然后总结一下就给老师邮件发过去了;

这个是邮件的内容orz 放不了截图

现在重新审视这个,都是有一个感性的认识orz,怕是远远不及校招的水平:

1.java如何判断对象是否是垃圾
(1)引用计数法
引用计数法就是如果一个对象没有被任何引用指向,则可视之为垃圾。这种方法的缺点就是不能检测到环的存在。
(2)根搜索算法
根搜索算法的基本思路就是通过一系列名为”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。
2.GC回收机制
GC :Garbage Collections 字面意思是垃圾回收器,释放垃圾占用的空间。让创建的对象不需要像c、c++那样delete、free掉 。对于c、c++的开发人员来说内存是开发人员分配的,也就是说还要对内存进行维护和释放。对于Java程序员来说,一个对象的内存分配是在虚拟机的自动内存分配机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,而且不容易出现内存泄露和内存溢出问题,但是,如果出现了内存泄露和内存溢出问题,而开发者又不了解虚拟机是怎么分配内存的话,那么定位错误和排除错误将是一件很困难的事情。
(1)Mark-Sweep(标记-清除)算法

这是最基础的垃圾回收算法,之所以说它是最基础的是因为它最容易实现,思想也是最简单的。标记-清除算法分为两个阶段:标记阶段和清除阶段。标记阶段的任务是标记出所有需要被回收的对象,清除阶段就是回收被标记的对象所占用的空间。
(2)Copying(复制)算法

为了解决Mark-Sweep算法的缺陷,Copying算法就被提了出来。它将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用的内存空间一次清理掉,这样一来就不容易出现内存碎片的问题。

这种算法虽然实现简单,运行高效且不容易产生内存碎片,但是却对内存空间的使用做出了高昂的代价,因为能够使用的内存缩减到原来的一半。 很显然,Copying算法的效率跟存活对象的数目多少有很大的关系,如果存活对象很多,那么Copying算法的效率将会大大降低。
(3)Mark-Compact(标记-整理)算法

为了解决Copying算法的缺陷,充分利用内存空间,提出了Mark-Compact算法。该算法标记阶段和Mark-Sweep一样,但是在完成标记之后,它不是直接清理可回收对象,而是将存活对象都向一端移动,然后清理掉端边界以外的内存。

在一般厂商JVM中老年代GC就是使用的这种算法,由于老年代的特点是每次回收都只回收少量对象。

上面的是一些常见的垃圾收集算法,垃圾收集算法是内存回收的理论基础,而垃圾收集器就是内存回收的具体实现。下面有几种创建的垃圾收集器,用户可以根据自己的需求组合出新年代和老年代使用的收集器。下面是常见的划分办法

新生代GC :串行GC(SerialGC)、并行回收GC(ParallelScavenge)和并行GC(ParNew)

串行GC:在整个扫描和复制过程采用单线程的方式来进行,适用于单CPU、新生代空间较小及对暂停时间要求不是非常高的应用上,是client级别默认的GC方式,可以通过-XX:+UseSerialGC来强制指定。

并行回收GC:在整个扫描和复制过程采用多线程的方式来进行,适用于多CPU、对暂停时间要求较短的应用上,是server级别默认采用的GC方式,可用-XX:+UseParallelGC来强制指定,用-XX:ParallelGCThreads=4来指定线程数。

并行GC:与老年代的并发GC配合使用。

老年代GC:串行GC(Serial MSC)、并行GC(Parallel MSC)和并发GC(CMS)。

串行GC(Serial MSC):client模式下的默认GC方式,可通过-XX:+UseSerialGC强制指定。每次进行全部回收,进行Compact,非常耗费时间。

并行GC(Parallel MSC):吞吐量大,但是GC的时候响应很慢:server模式下的默认GC方式,也可用-XX:+UseParallelGC=强制指定。可以在选项后加等号来制定并行的线程数。

转载于:https://www.cnblogs.com/liguo-wang/p/9358239.html

java垃圾回收机制GC相关推荐

  1. JAVA垃圾回收机制GC之我姐是明星

    JAVA垃圾回收机制GC(Garbage Collection) 工作面试老伙伴之java垃圾回收机制 什么是GC,为什么要GC(我的明星老姐) 判断垃圾(找到不常穿的衣服) A 引用计数算法 B 可 ...

  2. java 垃圾回收机制GC

    1.GC的作用取 2.什么是GC JVM在进行GC时,并非每次都对上面三个内存区域一起回收的,大部分时候回收的都是指新生代. 因此GC按照回收的区域又分了两种类型,一种是普通GC(minor GC), ...

  3. java垃圾回收机制_乐字节Java|GC垃圾回收机制、package和import语句

    本文接上一篇:乐字节Java|this关键字.static关键字.block块.本文是接着讲述JavaGC垃圾回收机制.package 和 import语句. 一.GC垃圾回收机制 GC全名:Garb ...

  4. Java垃圾回收(GC)机制详解

    Java垃圾回收(GC)机制详解 转自:https://www.cnblogs.com/xiaoxi/p/6486852.html 一.为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因 ...

  5. 36.JVM内存分哪几个区,每个区的作用是什么、如和判断一个对象是否存活、java垃圾回收机制、垃圾收集的方法有哪些、java类加载过程、类加载机制、双亲委派、Minor GC和Major GC

    36.JVM内存分哪几个区,每个区的作用是什么? 37.如和判断一个对象是否存活?(或者GC对象的判定方法) 38.简述java垃圾回收机制? 39.java中垃圾收集的方法有哪些? 40.java类 ...

  6. java对于垃圾回收机制[GC垃圾回收机制] 为什么有GC还会有内存溢出呢?

    java垃圾回收机制 来源于书本和工作中的总结. 内存泄露 如果分配出去的内存得不到释放,及时回收,就会引起系统运行速度下降,甚至导致程序瘫痪,这就是内存泄露 GC机制 java内存分配和回收 都是j ...

  7. 【JVM】Java垃圾回收机制(GC)详解

    Java垃圾回收机制(GC)详解 一.为什么需要垃圾回收? 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收.除非内存无限大,我们可以任性的分配不回收,但是事实并非如 ...

  8. java垃圾回收机制_笔记 | Java垃圾回收机制

    本文经授权转载自程序员杂货铺(ID:speakFramework) 垃圾回收 最近上海的小伙伴是不是要被强垃圾分类搞疯了???哈哈哈哈 上海是个走在前列的城市啊,不光骑自行车闯红灯要被罚钱,垃圾不分类 ...

  9. Java 垃圾回收机 GC Roots详解(Garbage Collection Roots)

    背景: 之前面试阿里支付宝,被问到常见的GC Root 是什么? 当时自己支支吾吾,明明自己看过深入理解Java 虚拟机这本书,但是就是回答不上来. 后来自己工作中,遇到内存泄漏问题.我百度,下载了M ...

  10. Java垃圾回收机制(Garbage Collection)

    引用博客地址:http://www.cnblogs.com/ywl925/p/3925637.html 以下两篇博客综合描述Java垃圾回收机制 第一篇:说的比较多,但是不详细 http://www. ...

最新文章

  1. 【AWSL】之Linux系统安全及应用(su、PAM、sudo、GRUB、JR、NMAP)
  2. Git 基础 —— 常用命令
  3. 使用struts做一个简单的登录跳转
  4. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之32---BREW PUSH 服务...
  5. 如何识别pdf文档中的文字(图像识别)python
  6. 非视线成像:基于飞秒摄影技术
  7. 蔡军生先生第二人生的源码分析(2)第二人生的基本功能
  8. java群侠传_梦幻群侠传之天剑如虹(下)
  9. 【简单的密码生成器】
  10. CommandLineRunner接口介绍
  11. Android 无usb数据线调试方法,ADB无线连接 调试
  12. python复利终值_财码Python管理会计小实验—投融资管理之货币时间价值
  13. 揭开“QUIC”的神秘面纱
  14. 基于Python实现期权定价和股票技术指标
  15. 关于 iOS开发者账号提示必须更新绑定手机号的解决方法
  16. 认识thinkphp框架
  17. 生活的乐趣源于生活本身
  18. Linux 在线时间校准
  19. SAP中国商业同略会发布HANA创业合作计划
  20. 计算机无信号然后黑屏,电脑开机显示无信号,然后黑屏,为什么

热门文章

  1. 拥抱Flutter,从0到1构建大前端应用
  2. CVR预估模型-ESMM
  3. 深度学习:径向基网络(RBF)
  4. Vector、ArrayList和List的异同
  5. GoldWave的消音、淡入淡出、改变音乐速率
  6. 【医疗影像处理】Erosion and Dilation of medical images masks using scipy.ndimage in python
  7. C++中继承和派生详解(公有、私有、保护继承的区别)
  8. python接口自动化登录后保存个人简介_python接口自动化三(登录及发帖)
  9. 计算机二级python真题3和答案_计算机二级python真题:第3套综合应用题
  10. 《高翔视觉slam十四讲》学习笔记 第四讲 李群与李代数