java垃圾回收机制
1 、垃圾回收机制(GC)
垃圾回收就是回收内存中不再使用对象;
(1)垃圾回收的步骤:
1)查找内存中不再使用的对象;
2)释放这些对象所占用的内存;
(2)查找内存中不再使用的对象方法:
1)引用计数法
如果一个对象没有被任何引用指向,则可视为垃圾;
缺点:不能检测到环的存在;
2)根搜索算法:
根搜索算法就是通过一系列名为“GC Roots”的对象作为起始点,
从这些节点开始向下搜索,搜索所走过的路径成为引用链,当一个对象
到GC Roots没有任何引用链相连时,则认为该对象未被引用。
(3)放这些对象占用的内存
总得来说就产生了三种类型的回收算法:
1)标记-复制
它将可用内存容量划分为大小相等的两块,每次只使用其中的一块。当这一块用完之后,
就将还存活的对象复制到另外一块上面,然后在把已使用过的内存空间一次理掉。
它的优点是实现简单,效率高,不会存在内存碎片。缺点就是需要2倍的内存来管理。
2)标记-清理
标记清除算法分为“标记”和“清除”两个阶段:首先标记出需要回收的对象,
标记完成之后统一清除对象。它的优点是效率高,缺点是容易产生内存碎片。
3)标记-整理
标记操作和“标记-清理”算法一致,后续操作不只是直接清理对象,
而是在清理无用对象完成后让所有 存活的对象都向一端移动,并更新引用其对象的指针。
因为要移动对象,所以它的效率要比“标记-清理”效率低,但是不会产生内存碎片。
4)基于分代的假设
由于对象的存活时间有长有短,所以对于存活时间长的对象,
减少被gc的次数可以避免不必要的开销。这样我们就把内存分成新生代和老年代,
新生代存放刚创建的和存活时间比较短的对象,老年代存放存活时间比较长的对象。
这样每次仅仅清理年轻代,老年代仅在必要时时再做清理可以极大的提高GC效率,
节省GC时间。
java垃圾回收机制的更多相关文章
- 【转载】Java垃圾回收机制
原文地址:http://www.importnew.com/19085.html Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联 ...
- 【转】深入理解 Java 垃圾回收机制
深入理解 Java 垃圾回收机制 一.垃圾回收机制的意义 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再 ...
- 深入理解java垃圾回收机制
深入理解java垃圾回收机制---- 一.垃圾回收机制的意义 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再 ...
- Java垃圾回收机制_(转载)
Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来.在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给 ...
- 成为Java GC专家(3)—如何优化Java垃圾回收机制
为什么需要优化GC 或者说的更确切一些,对于基于Java的服务,是否有必要优化GC?应该说,对于所有的基于Java的服务,并不总是需要进行GC优化,但前提是所运行的基于Java的系统,包含了如下参数或 ...
- java 垃圾回收机制 引用类型
Java语言的一个重要特性是引入了自动的内存管理机制,使得开发人员不用自己来管理应用中的内存.C/C++开发人员需要通过malloc/free 和new/delete等函数来显式的分配和释放内存.这对 ...
- 【Java】Java垃圾回收机制
Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来.在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给 ...
- Java垃圾回收机制的工作原理
Java垃圾回收机制的工作原理 [博主]高瑞林 [博客地址]http://www.cnblogs.com/grl214 获取更多内容,请关注小编个人微信公众平台: 一.Java中引入垃圾回收机制的作用 ...
- Java 垃圾回收机制(早期版本)
Java 垃圾回收机制在我们普通理解来看,应该视为一种低优先级的后台进程来实现的,其实早期版本的Java虚拟机并非以这种方式实现的. 先从一种很简单的垃圾回收方式开始. 引用计数 引用计数是一种简单但 ...
- 深入理解 Java 垃圾回收机制
深入理解 Java 垃圾回收机制 一:垃圾回收机制的意义 java 语言中一个显著的特点就是引入了java回收机制,是c++程序员最头疼的内存管理的问题迎刃而解,它使得java程序员 ...
随机推荐
- Automated Memory Analysis
catalogue . 静态分析.动态分析.内存镜像分析对比 . Memory Analysis Approach . volatility: An advanced memory forensics ...
- Word2016(2013)怎么从任意页插入起始页码
添加页码 1 小知识:双击任意页的页脚或页眉区域,激活页眉页脚设计界面.双击文档正文区域,返回正文编辑界面. 2 双击任意页的页脚或页眉区域,激活页眉页脚设计界面.单击"页码" ...
- Redis Cluster 分区实现原理
Redis Cluster本身提供了自动将数据分散到Redis Cluster不同节点的能力,分区实现的关键点问题包括:如何将数据自动地打散到不同的节点,使得不同节点的存储数据相对均匀:如何保证客户端 ...
- AnjularJS系列3 —— 数据的双向绑定
第三篇,双向的数据绑定 数据绑定是AnguarJS的特性之一,避免书写大量的初始代码从而节约开发时间 数据绑定指令提供了你的Model投射到view的方法.这些投射可以无缝的,毫不影响的应用到web应 ...
- 数据结构之平衡查找树(AVL)
AVL树的旋转操作 图解 最详细 各大教课书上讲的都是左旋与右旋,其实这样很容易理解错误,我们换一种叫法.我们称呼左旋为:逆进针旋转.我们称呼右旋为:顺进针旋转.
- JS 获取CSS属性值
obj: 元素对象 attribute: 属性 返回值:该对象这个属性的值 function getDefaultStyle(obj,attribute){ // 返回最终样式函数,兼容IE和DOM, ...
- javascript 技巧总结积累(正在积累中)
1.文本框焦点问题 onBlur:当失去输入焦点后产生该事件 onFocus:当输入获得焦点后,产生该文件 Onchange:当文字值改变时,产生该事件 Onselect:当文字加亮后,产生该文件 & ...
- [译]C#编码约定
原文:https://msdn.microsoft.com/en-us/library/ff926074.aspx 编码约定的目的是: 创建统一格式的代码,让读者的注意力更集中在内容上面,而不是结构 ...
- Java面试常见问题汇总
1 String,StringBuffer与StringBuilder的区别?? String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非 ...
- 【学习笔记】Struts2之一个Action包含多个控制处理逻辑
一.使用Action的动态方法调用 如果一个页面包含多个按钮,系统分别提交给Action的不同方法处理.此时可以采用DMI(Dynamic Method Invocation,动态方法调用)来 ...