zoukankan      html  css  js  c++  java
  • 垃圾收集

    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也符合垃圾收集器的收集标准。

        

  • 相关阅读:
    oracle 导入数据时提示只有 DBA 才能导入由其他 DBA 导出的文件
    oracle 常用语句
    android udp 无法收到数据 (模拟器中)
    android DatagramSocket send 发送数据出错
    AtCoder ABC 128E Roadwork
    AtCoder ABC 128D equeue
    AtCoder ABC 127F Absolute Minima
    AtCoder ABC 127E Cell Distance
    CodeForces 1166E The LCMs Must be Large
    CodeForces 1166D Cute Sequences
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/10499525.html
Copyright © 2011-2022 走看看