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异常卡住了
前言 为什么需要垃圾回收 首先我们来聊聊为什么会需要垃圾回收,假设我们不进行垃圾回收会造成什么后果,我们举一个简单的例子 我们住在一个房子里面,我们每天都在里面生活,然后垃圾都丢在房子里面,又不打扫, ...
随机推荐
- JavaScript学习笔记(七)—— 再说函数
第八章 函数 1 函数声明和函数表达式 差别一:函数声明:函数在执行代码前被创建:函数表达式是在运行阶段执行代码时创建: 差别二:函数声明创建一个与函数同名的变量,并让她指向函数:使用函数表达式,不给 ...
- Centos7 安装与破解 Confluence 6.7.1
1.1硬件需求建议: CPU:32/64 bit 2.27GHz双核心以上之CPU: 内存:8GB以上: 硬盘:300GB,7200转以上: 建议数据库.Confluence等各自独立一台服务器(本测 ...
- 在虚拟机上搭建物理机可访问的web服务(IIS)
0x0 前言 安装webug4.0的时候突发奇想,想学下如何在虚拟机里搭建网站,然后让主机像访问互联网的网站一样访问虚拟机的网站,为以后渗透测试搭建环境做准备 0x1 虚拟机安装win2003[以防万 ...
- linux下自己安装软件做成命令
安装nodejs,从官网下下来的是一个压缩包,解压下里面有可执行文件.教程上用ln -s [可执行文件的绝对路径] [/usr/local/bin/]建了一个软连接,这样就能直接无视路径,用命令行调用 ...
- 对于新手来说,Python 中有哪些难以理解的概念?
老手都是从新手一路过来的,提起Python中难以理解的概念,可能很多人对于Python变量赋值的机制有些疑惑,不过对于习惯于求根究底的程序员,只有深入理解了某个事物本质,掌握了它的客观规律,才能得心应 ...
- Mongodb For Mac OSX && 登录验证
题外话:尽管有不少人贴出了 <我不用mongodb的十大理由> 等系列文章,但是 NoSQL 的发展不会因此而止步, mongodb 是 NoSQL 的典型代表,楼主还是抱乐观态度的,有人 ...
- Linux常用软件安装与配置——目录
http://blog.csdn.net/clevercode/article/details/45740431
- Prism框架的优点
以我粗略的了解,prism/mvvm可以做到完全的逻辑和ui分离.即便是事件都是如此.这是主要优点.mvc是从本质上ui框架(当前大量半吊子把业务逻辑写在里面是不对的),mvvm包含客户端的业务逻辑. ...
- vue开发 ES5——> ES6设置
- No module named 'MySQLdb' python3.6 + django 1.10 + mysql 无法连接
学习python 连接mysql数据库的时候遇到了问题 首先安装mysql: 工具栏 ===>file ==> default settings==>Project Interpre ...