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

        

  • 相关阅读:
    git 常用操作命令行
    Mysql 命令行...
    bootstrap
    10.11 android输入系统_补充知识_activity_window_decor_view关系
    10.10 android输入系统_APP获得并处理输入事件流程
    10.9 android输入系统_APP跟输入系统建立联系和Dispatcher线程_分发dispatch
    10.8 android输入系统_实战_使用GlobalKey一键启动程序
    10.7 android输入系统_Dispatcher线程情景分析_Reader线程传递事件和dispatch前处理
    10.6 android输入系统_Dispatcher线程_总体框架
    10.5 android输入系统_Reader线程_使用EventHub读取事件和核心类及配置文件_实验_分析
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/10499525.html
Copyright © 2011-2022 走看看