深入理解java垃圾回收机制
2016-02-04 11:06
302 查看
一、垃圾回收机制的意义
Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。 ps:内存泄露是指该内存空间使用完毕之后未回收,在不涉及复杂数据结构的一般情况下,Java的内存泄露表现为一个内存对象的生命周期超出了程序需要它的时间长度,我们有时也将其称为“对象游离”。二、垃圾回收机制中的算法
Java语言规范没有明确地说明JVM使用哪种垃圾回收算法,但是任何一种垃圾回收算法一般要做2件基本的事情:(1)发现无用信息对象;(2)回收被无用对象占用的内存空间,使该空间可被程序再次使用。 1.引用计数法(Reference Counting Collector)1.1算法分析 引用计数是垃圾收集器中的早期策略。在这种方法中,堆中每个对象实例都有一个引用计数。当一个对象被创建时,且将该对象实例分配给一个变量,该变量计数设置为1。当任何其它变量被赋值为这个对象的引用时,计数加1(a=b,则b引用的对象实例的计数器+1),但当一个对象实例的某个引用超过了生命周期或者被设置为一个新值时,对象实例的引用计数器减1。任何引用计数器为0的对象实例可以被当作垃圾收集。当一个对象实例被垃圾收集时,它引用的任何对象实例的引用计数器减1。1.2优缺点优点: 引用计数收集器可以很快的执行,交织在程序运行中。对程序需要不被长时间打断的实时环境比较有利。缺点: 无法检测出循环引用。如父对象有一个对子对象的引用,子对象反过来引用父对象。这样,他们的引用计数永远不可能为0.1.3引用计数算法无法解决循环引用问题,例如:[code=java;toolbar:false">public class Main {public static void main(String[] args) {
MyObject object1 =newMyObject();
MyObject object2 =newMyObject();
object1.object = object2;
object2.object = object1;
object1 =null;
object2 =null;
}
}
相关文章推荐
- Java新手问题集锦
- Java实现websocket
- JAVA的内存模型及结构
- SpringMVC学习笔记-REST风格CRUD
- SpringMVC学习笔记-续
- SpringMVC学习笔记-Hello world
- sbt构建scala工程并导入scala-eclipse开发spark
- Spring4学习笔记-SpringJDBC基本操作(补充)
- Java连接Sql数据库经常用到的操作
- WebService学习笔记-添加拦截器到基于Spring的Webservice
- WebService学习笔记-使用CXF编写基于Spring的Webservice
- Mybatis学习笔记-Mybatis与Spring的整合
- java Map集合框架之HashMap
- Spring4学习笔记-Spring4整合Hibernate4
- Spring4学习笔记-Spring4整合Struts2(基于配置文件的方式)
- Spring4学习笔记-声明式事务(基于配置文件的方式)
- Spring4学习笔记-声明式事务(基于注解的方式)
- Spring4学习笔记-JDBC
- Spring4学习笔记-AOP(基于配置文件的方式)
- Spring4学习笔记-AOP(基于注解的方式)