垃圾收集

1.Java中的垃圾收集器相对于以前语言的优势是什么?、

  (1)过去的语言要求程序员显示的分配内存、释放内存。程序在需要的时候分配内存,在不需要的时候释放内存。但是这种做法常常引起内存泄漏,即由于某种原因使得分配的内存始终没有得到释放。如果该任务不断重复,程序最终会耗尽内存并异常终止,至少使得程序无法继续执行下去。相比之下,Java不要求程序员显式的分配内存和释放内存,避免了潜在的很多问题。Java在创建对象的时候会自动分配内存,并当该对象的引用不存在的时候释放掉这些内存。

  (2)Java中使用被称为垃圾收集器的技术来监视Java程序的运行,当对象不再使用的时候,就自动释放对象所使用的内存。java使用一系列的软指针来跟踪对象的各个引用,并用一个对象表将这些软指针映射为对象的引用。使用软指针,Java的垃圾收集器能够以单独的线程在后台运行,并依次检查每个对象,通过更改对象表项,垃圾收集器可以标记对象,移除对象、移动对象或者检查对象。

  (3)垃圾收集器是自动运行的,一般情况下,无须现实的请求垃圾收集器。程序运行的时候,垃圾收集器会不时检查对象的各个引用,并回收无引用时对象所占用的内存。调用System类中的静态gc()方法可以运行垃圾收集器,但是这样并不能保证立即回收指定的对象。

2.如果一个程序保持和创建一个对象引用时,其他的任何引用没有被抛弃,也就会造成内存耗尽的结果,垃圾回收并不是一个独立的平台,具有平台依赖。

3.垃圾回收机制(最重要):

  (1)gc即垃圾收集机制,是指JVM用于释放那些不再使用的对象内存。java语言并不要求JVM有gc,也没有规定gc如何工作。不过常用的jvm都有gc,而且大多数gc都是用类似的算法管理内存和执行收集操作。Java的垃圾收集机制是为所有的java应用进程服务的,而不是为某个特定的进程服务的。因此任何一个进程都不能命令垃圾回收机制做什么、怎么做或者做多少。在垃圾收集器收集一个对象之前,一般要求程序调用适当的方法释放掉资源,但是在没有明确释放资源的情况下,Java提供了默认机制终止化该对象来释放资源,这个方法就是finalize()。它的原型为protected void finalize() throws  Throwable。在finallize()方法返回之后,对象消失,垃圾收集开始执行。原型中的Throws Throwable表示它可以跑出任何类型的异常。

4.下列代码中,第几行的sobj复合来及收集器的收集标准》

  (1)Object sobj = new Object();

  (2)Object sobj = null ;

  (3)Object sobj = new Object();

  (4)sobj = new Object();

  答案是:(1),(3)两行。因为第2行将sobj赋值为null,所以第一行的sobj符合垃圾收集器的收集标准。而第四行相当于将sobj赋值为null,所以第三行的sobj也符合垃圾收集器的收集标准。

    

原文地址:https://www.cnblogs.com/bigdata-stone/p/10499525.html