码迷,mamicode.com
首页 > 编程语言 > 详细

Java中的垃圾回收机制&内存管理

时间:2016-08-04 17:35:17      阅读:399      评论:0      收藏:0      [点我收藏+]

标签:

1.

  Java在创建对象时,会自动分配内存,并当该对象引用不存在的时候,释放这块内存。

  为什么呢?

  因为Java中使用被称为垃圾收集器的技术来监视Java程序的运行,当对象不再使用时,就自动释放对象所使用的内存。

  垃圾收集器是自动运行的,无须显式地请求垃圾收集器,程序运行时,垃圾收集器会不时检查对象的各个引用,并回收无引用对象所占用的内存。

  可以调用System类中的静态gc()方法来运行垃圾收集器。

2.

  Java语言并不要求JVM有gc,也没有规定gc如何工作。

  Java垃圾回收机制是为所有的Java应用程序服务的,而不是为某个特定的进程服务的,因此,任何一个进程都不能命令垃圾回收机制做什么,怎么做,做多少。

  Java提供了默认机制终止化该对象来释放资源,这个方法就是finalize();

栗子:  

Object sobj=new Object();
Object sobj=null;
Object sobj=new Object();
sobj=new Object();

  第几行的sobj符合垃圾回收机制的标准?

  答案:第1行和第3行

  原因:因为第2行将sobj赋值为null,所以第1行符合。第4行也相当于将sobj赋值为null。

  判断一块内存空间是否符合垃圾收集器收集标准的原则:

  (1)给对象赋予了空值null,以后再也没有调用过。

  (2)给对象赋予了新值,即重新分配了内存空间。

一块内存空间符合了垃圾收集器的收集原则,并不意味着这块内存就一定会被垃圾收集器收集。

  垃圾回收不是一个独立的平台

 3.Java是如何管理内存的?

  Java的内存管理就是对象的分配和释放问题。

  在Java中,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对象都在堆中分配空间。

  对象的释放是由gc决定和执行的。对象释放的根本原则就是该对象不再被引用。

  也就是说内存分配由程序完成,内存释放由gc完成。

4.内存泄漏

  下面给出一个简单的内存泄漏的栗子:

Vector v=new Vector(10);
for(int i=0;i<100;i++){
     Object o=new Object();
     v.add(o);
     o=null;
}
//此时,所有的Object对象都没有被释放,因为变量v引用这些对象。

  原因:因为这个对象加入到了Vector中,还必须从Vector中删除

  可以再加一句:v=null;

  总结内存泄漏原因(一句话):保留下来却永远不再使用的对象的引用。

  解决内存泄漏的方法:

  将对象字段设置为null或者从集合(collection)中移除对象儿完成。

 

Java中的垃圾回收机制&内存管理

标签:

原文地址:http://www.cnblogs.com/GumpYan/p/5737460.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!