zoukankan      html  css  js  c++  java
  • Java中的垃圾回收机制&内存管理&内存泄漏

    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)给对象赋予了新值,即重新分配了内存空间。

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

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

    栗子:关于JAVA的垃圾回收机制,下面哪些结论是正确?B

      A.程序可以任意指定释放内存的时间

      B.JAVA程序不能依赖于垃圾回收的时间或者顺序

      C.程序可明确地标识某个局部变量的引用不再被使用

      D.程序可以显式地立即释放对象占有的内存

     解释:java提供了一个系统级的线程,即垃圾回收器线程。用来对每一个分配出去的内存空间进行跟踪。当JVM空闲时,自动回收每块可能被回收的内存,GC是完全自动的,不能被强制执行。程序员最多只能用System.gc()来建议执行垃圾回收器回收内存,但是具体的回收时间,是不可知的。

      当对象的引用变量被赋值为null,可能被当成垃圾。
     

     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;

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

      具体原因:(1)全局集合(全局的数据储存库,要有机制使得从储存库中移除不需要的数据)

           (2)缓存

           (3)classLoder  

      解决内存泄漏的方法:

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

  • 相关阅读:
    jquery animate()方法 语法
    jquery unload方法 语法
    jquery undelegate()方法 语法
    jquery unbind()方法 语法
    jquery trigger() 方法 语法
    jquery toggle()方法 语法
    jquery change() 函数 语法
    jquery blur()函数 语法
    jquery bind()方法 语法
    jquery checked选择器 语法
  • 原文地址:https://www.cnblogs.com/GumpYan/p/5737460.html
Copyright © 2011-2022 走看看