JVM 垃圾回收机制和常见算法
垃圾回收机制:释放那些不再持有引用的对象的内存。
如何判断对象是否需要回收?
- 引用计数:对象,内存,磁盘空间等被引用次数保存起来,次数为0时将其进行释放。
- 对象引用遍历:对象应用遍历从一组对象开始,沿着对象图的每条链接,递归课到达对象,如果不能从根对象到达,则将它进行回收。
垃圾回收方法?
1. 标记清除法:遍历对象图并记录可达对象,以便删除不可达对象,一般使用单线程工作并可能产生内存碎片,标记回收会分为“标记”、“清除”两阶段,先标记需要回收的对象,标记后统一进行清除。标记清除过程效率不高;

2. 标记整理法:遍历对象图并记录可达对象,以便删除不可达对象,一般使用单线程工作并可能产生内存碎片,并将存活对象压缩到内存的一端,这样内存碎片可以合成一整块可用内存区域,提高内存利用率,缺点进行对象移动,成本较高,好处是不会产生内存碎片。

3. 复制回收法:复制回收将可用内存划分为大小相等的两块,每次只是用其中一块,当这块使用完的时候,就将还存活的对象复制到另一块内存中去,然后在把已经使用过的内存空间一次性处理掉,这样使得每次都是对其中的一块进行内存回收,不会产生碎片等情况,只要移动对指针,按照顺序分配内存即可,实现简单,运行高效,缺点,内存占用多一半。

4. 分代回收法:根据对象的存活周期的不同将内存划分为几块,一般将java堆分为新生代和老年代,这样就可以根据各个年代的特点采用适当的收集算法:
新生代:垃圾回收的时候发现大批对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集。
老年代:对象存活率高,没有额外空间对他进行分配担保,就必须使用标记清理算法进行回收。
垃圾回收器:
serial收集器:android 2.3之前采用这个收集器进行垃圾回收,会停止所有的UI操作。单线程收集器,只会使用一个CPU或一条线程去完成工作,进行垃圾回收的时候,暂停其他工作线程,直到工作完毕。对于限定单个CPU的环境,serial收集器没有线程交互,自然高效。
parNew收集器:serial收集器的多线程版本,运行在server模式下首选的收集器,能够和CMS收集器配合工作,CMS收集器是个优秀的并发垃圾收集器,parNew能与其搭配让parNew收集器更加完美。
parallel Scavenge收集器:新生代收集器,利用复制算法进行回收,并发多线程收集器,可控制吞吐量(运行用户代码时间/(运行用户代码时间+垃圾收集时间))的收集器。可以设置最大垃圾停留时间和吞吐量大小,打开垃圾收集将根据当前系统运行状态自动调节,这种方式成为GC自适应调节策略。手工优化存在困难的时候可直接交给虚拟机去完成。
G1收集器:结合空间整合,不会产生大量碎片,降低GC频率。可明确指定停顿时间,划分优先级操作,保证效率。
CMS收集器:获取最短回收停顿时间为目标的收集器。应用于互联网B/S架构的服务器上,重视响应时间。采用标记-清除算法,效率上占用CPU资源,使得应用程序变慢,无法处理浮动垃圾;算法是会产生大量碎片,无法为大对象分配内存的时候出发full gc,cms默认提供参数默认开启full gc。
JVM 垃圾回收机制和常见算法的更多相关文章
- jvm垃圾回收机制和常见算法
这是朋友给的面试题里边的,具体地址已经找不到,只能对原作者说声抱歉了: 理论上来讲sun公司只定义了垃圾回收机制规则,而步局限于其实现算法,因此不同厂商生产的虚拟机采用的算法也不尽相同. GC(Gar ...
- JVM 垃圾回收机制和常见算法和 JVM 的内存结构和内存分配(面试题)
一.JVM 垃圾回收机制和常见算法 Sun 公司只定义了垃圾回收机制规则而不局限于其实现算法,因此不同厂商生产的虚拟机采用的算法也不尽相同.GC(Garbage Collector)在回收对象前首先必 ...
- JVM垃圾回收机制和常用算法
由于疫情的原因,所以目前一直在家远程办公,所以很多时间在刷面试题,发现2019大厂的面试虽然种类很多,但是总结了一下发现主要是这几点:算法和数据结构. JVM.集合.多线程.数据库这几点在面试的时候比 ...
- JVM虚拟机(四):JVM 垃圾回收机制概念及其算法
垃圾回收概念和其算法 谈到垃圾回收(Garbage Collection)GC,需要先澄清什么是垃圾,类比日常生活中的垃圾,我们会把他们丢入垃圾箱,然后倒掉.GC中的垃圾,特指存于内存中.不会再被使用 ...
- JVM内存管理和JVM垃圾回收机制
JVM内存管理和JVM垃圾回收机制(1) 这里向大家描述一下JVM学习笔记之JVM内存管理和JVM垃圾回收的概念,JVM内存结构由堆.栈.本地方法栈.方法区等部分组成,另外JVM分别对新生代和旧生代采 ...
- JVM垃圾回收机制概述
JVM垃圾回收机制概述 1.定义 是指JVM用于释放那些不再使用的对象所占用的内存. 2.方式 2.1引用计数(早期) 当引用程序创建引用以及引用超出范围时,JVM必须适当增减引用数.当某个对象的引用 ...
- JVM基础系列第8讲:JVM 垃圾回收机制
在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由<Java 虚拟机规范>指定的,每个 Java 虚拟机可能都有不同的实现.其实涉及到 Java 虚拟机的内存, ...
- JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代
内存模型 JVM运行时数据区由程序计数器.堆.虚拟机栈.本地方法栈.方法区部分组成,结构图如下所示. JVM内存结构由程序计数器.堆.栈.本地方法栈.方法区等部分组成,结构图如下所示: 1)程序计数器 ...
- 真的可惜,四面阿里,结果我被JVM垃圾回收机制与 OOM异常卡住了
前言 为什么需要垃圾回收 首先我们来聊聊为什么会需要垃圾回收,假设我们不进行垃圾回收会造成什么后果,我们举一个简单的例子 我们住在一个房子里面,我们每天都在里面生活,然后垃圾都丢在房子里面,又不打扫, ...
随机推荐
- 三羊献瑞:dfs / next_permutation()
三羊献瑞 观察下面的加法算式: 祥 瑞 生 辉 + 三 羊 献 瑞------------------- 三 羊 生 瑞 气 (如果有对齐问题,可以参看[图1.jpg]) 其中,相同的汉字代 ...
- 为什么使用React Native
React Native使你能够在Javascript和React的基础上获得完全一致的开发体验,构建世界一流的原生APP. React Native着力于提高多平台开发的开发效率 —— 仅需学习一次 ...
- 最新!2016中国城市GDP排名出炉
2017年1月20日,国家统计局公布:2016年中国国内生产总值GDP达744127亿元,同比增长6.7%,城市GDP方面:截至1月20日,全国大部分城市的去年经济运行数据已经公布,根据信息汇总,20 ...
- 【CS231N】7、卷积神经网络
一.疑问 1. assignments2 在代码文件FullyConnectedNets.ipynd 中,有代码如下: # Test the affine_forward function num_i ...
- windows和RedHat双系统安装说明
该博客记录了安装windows和RedHat双系统的方法.这里的windows系统是win8.1,RedHat是RHEL-server-7.0-x86_64-LinuxProbe.Com.iso,该i ...
- 简单实现wc.exe软件基本功能
简单实现wc.exe软件基本功能 软件需求分析: 一.基本功能 支持 -c 统计字符数(char count) 支持 -w 统计单词数(word count) 支持 -l 统计总行数(line ...
- Gradle入门(1):安装
在Ubuntu下,执行以下命令: sudo apt-get install gradle 安装完成后,执行命令: gradle -v 得到以下信息: Picked up _JAVA_OPTIONS: ...
- iOS- Swift:指触即开,如何集成Touch ID指纹识别功能
1.前言 随着移动支付时代的到来,Touch ID 指纹验证迅速被支付宝,微信钱包普及,相信各位朋友使用后也大呼方便.之前写了篇关于iOS9的3D Touch的集成使用,有朋友在我博客下提到,让我写一 ...
- dotTrace快速帮助你定位C#代码的性能瓶颈
dotTrace 1. 问题描述 IIS发布的接口运行一段时间后变的很慢,重启IIS连接池后问题得到解决,但是运行一段时间后再次出现变慢的问题 2. 问题原因 程序中有读取xml文件的 ...
- 安装virtualbox
1.安装virtualbox https://www.virtualbox.org/ 2.安装centos6.6 3.配置网络 右键-->网络-->网卡2-->host-only c ...