不是写了吗,都是一样的类呀,类名一样呀,,都是Hello.java呀

解决方案 »

  1.   

    1 是直接执行的main函数的程序
    2。3 都是通过java文件的执行顺序都是从他的构造方法来实现的!4 则是使用实例化一个类的对象来实现的,然后通过调用类中的方法来实现!
    关于它的回收是有jvm自动来实现的,没有必要考虑的!在C,C++ 或其它语言中,程序员负责取消分配存储器。有时,这是一件很困难的事情。因为你并不总是事先知道存储器应在何时被释放。当在系统中没有能够被分配的存储器时,可导致程序瘫痪,这种程序被称作具有存储器漏洞。
    Java编程语言解除了程序员取消分配存储器的责任,它可提供一种系统级线程以跟踪每一存储器的分配情况。在Java虚拟机的空闲周期,垃圾收集线程检查并释放那些可被释放的存储器。
        垃圾收集在Java技术程序的生命周期中自动进行,它解除了取消分配存储器的要求,并避免了存储器漏洞。然而,垃圾收集可在JVM实现的周期中,产生意想不到的变化。
      

  2.   

    也就是说,我想在这个时候回收那个one所占的内存,
      

  3.   

    JVM在三种时刻收集垃圾:
    1.受到请求时(On request)——方法System.gc为JVM提出建议,现在是垃圾收集的好时机。此方法并不要求一定进行垃圾收集,不过事实上他一般会导致垃圾收集立即开始。此方法的确切操作要视JVM而定。
    2.受到要求时(On demand)——唯一能够要求进行垃圾收集的就是new函数。如果new需要内存,它会调用垃圾收集器并发出请求,要求释放至少能够满足当前分配请求的足够内存。
    3.后台(Background)——JVM有一个优先级的线程用以检测系统空闲状态。该现成大部分时间都在睡眠。每次运行时,它会检查自从他上次巡查以来是否有线程运行过。当JVM已空闲了若干周期,空闲检测现成将会触发垃圾收集。这里有一项假定就是:如果一段时间以来除了空闲检测者以外没有其他程序运行,将来就会有一段时间内没有很重要的程序打算运行。
    ——摘自《实时JAVA平台变成》
      

  4.   

    错了,是《实时JAVA平台编程》
      

  5.   

    好呀,谢谢大家,这个问题有一个缺点,没有问明白,报歉,是这样的, A有一个方法a(),B有一个方法b()
    当A的对象去使用a()方法的时候要大内存,但是结果却要送给B对象的b()方法,我担心在使用的过程中,由于A产生多个对象,去调用a()方法时,传给B的多个对象的b()方法,我想为了能快,想将B的对象一但调用过b()方法后,就清空这个B的对象所用的内存!
      

  6.   

    当你的对象处于eligible for garbage collection的状态时,
    虚拟机会根据当前的情况来选择是否回收内存.
    他会根据你的操作系统还有多少内存可以用,现在是不是很忙,等等来决定.
    因为回收内存是一件很耗时间的事情.
    但是你可以用System.gc();来建议虚拟机回收当前 eligible for garbage collection的对象。
    你只能建议,但是不能保证虚拟机一定会做。
    在你的3.4两个类的main方法结束后,你new的对象已经都是eligible for garbage collection了。但是在你退出main方法前,两个对象还是不会给回收的。
      

  7.   

    to  maowu(猫呜) ( ) 信誉:100 :
        如果这样说的话,那就是说,最好只使用一个对象,用这个对象调用不同的方法,是最快的了,直到这个程序结束了?
      

  8.   

    to  maowu(猫呜) ( ) 信誉:100 :
      "但是在你退出main方法前,两个对象还是不会给回收的"
    我说的就是这个.也就是说,如果没有退出这个main方法,那么如果在程序中会不断的产生一个新对象,那么这些产生的新对象如何消亡呢,?
      

  9.   

    你的问题是这样啊。
    那就在你认为这个对象没有用后赶紧把这个对象的引用清空啊
    public static void main(String args[])
    {
    Hello one=new Hello();
                      one.display();
                      one = null; //过了这一行,这个对象就可以被回收了。
    }