易截截图软件、单文件、免安装、纯绿色、仅160KB

java垃圾回收算法一窥







记得部门老大曾经说过,java的垃圾回收机制对于java体系结构的学习非常重要。这里将阅读的一些文献整理总结出来,记述java的几种垃圾回收算法。
  垃圾回收算法有两个基本的问题:1.必须检测到垃圾对象。2.必须重新声明被垃圾对象占用的堆空间并且让堆空间可用。
  可达性(reachability)
  一个对象是可达的,当且仅当从可执行程序的根集开始有引用路径能访问该对象。
  根集(roots
set)
  包括:1.局部变量的对象引用,栈元素以及任何类变量的对象引用
        2.任何对象引用,如string
        3.任何传递给本地方法的对象引用
        4.JVM的运行时数据区的任何部分
  引用记数(reference
counting)
 
这是一种不使用根集的垃圾回收算法。基本思想是:当对象创建并赋值时该对象的引用计数器置1,每当对象给任意变量赋值时,引用记数+1;一旦退出作用域则引用记数-1。一旦引用记数变为0,则该对象可以被垃圾回收。
  引用记数有其相应的优势:对程序的执行来说,每次操作只需要花费很小块的时间。这对于不能被过长中断的实时系统来说有着天然的优势。
  但也有其不足:不能够检测到环(两个对象的互相引用);同时在每次增加或者减少引用记数的时候比较费时间。
  在现代的垃圾回收算法中,引用记数已经不再使用。
  追踪算法(tracing)
 
基于根集的最基本算法。基本思想是:每次从根集出发寻找所有的引用(称为活对象),每找到一个,则对其做出标记,当追踪完成之后,所有的未标记对象便是需要回收的垃圾。
 
追踪算法基于标记并清除.这个垃圾回收步骤分为两个阶段:在标记阶段,垃圾回收器遍历整棵引用树并标记每一个遇到的对象。在清除阶段,未标记的对象被释放,并使其在内存中可用。
  紧凑算法(compacting)
 
在追踪算法中,每次被释放的对象会让堆空间出现碎片,这会使得内存的页面管理变得非常不稳定,可能在还有足够内存空间时就发生溢出,这对于本来就紧张的JVM内存资源来说是非常不利的。由此出现了紧凑算法。
 
基本思想是:在追踪算法进行垃圾回收的基础上,每次标记清扫时顺便将对象全部整理到内存的一端,这样每次分配内存时便都能从顺序的空间


相关文档:

sql 2005 存储过程分页 java 代码

 create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',         
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列 ......

Java网络编程1

       InetAddress类代表IP地址,有两个子类,Inet4Address,Inet6Address代表IPV4和IPv6,没有构造方法,但是提供个了两个静态方法来获取InetAddress实例:getByName(String host):根据逐句获取对应的InetAddress对象;getByAddress(byte[]addr):根据原始IP地址来获取对应的InetAddress对� ......

java设计模式简介(1)

基本模式:
1.       接口模式:当多个类提供近似的服务的时候,通过接口模式,不同的服务提供者类所提供的共同的服务就可以被抽象出来,并被声明为一个独立的接口。这样客户对象就能以一种无缝的方式来使用不同的服务提供类,而无需进行任何改动。
2.    抽象类模式:可以 ......

几种读取属性文件的JAVA实现方式

 
1.使用java.util.Properties类的load()方法
InputStream in = lnew BufferedInputStream(new FileInputStream(name));
  Properties p = new Properties();
  p.load(in);
2.使用java.util.ResourceBundle类的getBundle()方法  
ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault ......

JAVA堆栈的区别

 
1
. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。      
    
  2
. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号