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

        

  • 相关阅读:
    Linux下如何查看版本信息
    linux的top命令参数详解
    浅谈Linux内存管理机制
    python3 判断字符串是否为纯空格组成的方法
    python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
    python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
    python3 list列表随机选取一个元素、随机选择一个user-agent
    windows系统中,在当前目录下打开cmd命令行的两种方法
    name 'reload' is not defined解决方法
    Vue.js05:vue内联样式
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/10499525.html
Copyright © 2011-2022 走看看