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程序员 ...
随机推荐
- JUC学习笔记--Atomic原子类
J.U.C 框架学习顺序 http://blog.csdn.net/chen7253886/article/details/52769111 Atomic 原子操作类包 Atomic包 主要是在多线程 ...
- 字符串 中的split 与数组中的join
关于基础,总是隔一段时间,就得看一次,要不不用总是忘,今天又重新看了,一下字符串对象的split,然后就想到了数组对象的join. var str='wo shi yi ge js'; var str ...
- dom 的介绍
直接上干货 ...网址在此,,,,, <a href="https://developer.mozilla.org/zh-CN/docs/Web/API/Document_Object ...
- New Plan!
很久无写过blogs,荒废得差不多了,在博客园虽开bolg 5年多,但由于自己工作的问题,从开始的热情记录,到冷却冰冻,再到现在重拾起来,有一番感受:从大学刚毕业的制作网页菜鸟,开始接触DIV,CSS ...
- vs2015 HTTP Error 400. The request hostname is invalid.
<site name="> <application path="/" applicationPool="Clr4IntegratedAppP ...
- c语言一些知识点的记录
1.extern关键字 extern关键字可以置于变量或者函数前面,用于告诉编译器此变量或函数定义于其他的模块.
- window.open打开新窗口被浏览器拦截的处理方法
一般我们在打开页面的时候, 最常用的就是用<a>标签,如果是新窗口打开就价格target="_blank"属性就可以了, 如果只是刷新当前页面就用window.loca ...
- socket (一)
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...
- manacher算法专题
一.模板 算法解析:http://www.felix021.com/blog/read.php?2040 *主要用来解决一个字符串中最长回文串的长度,在O(n)时间内,线性复杂度下,求出以每个字符串为 ...
- javascript运动框架
下面这个一个运动框架可以控制元素在一个属性上的运动,同时,可以调用回调函数. /* 获取元素某个属性的值 @obj: 对象 @attr: 属性值 */ function getStyle(obj, a ...