当前位置:  技术问答>java相关

请大家帮我看一下这个程序!

    来源: 互联网  发布时间:2015-04-01

    本文导语:  我刚开始学习JAVA,有一个例子我不太明白: //: c04:Garbage.java // Demonstration of the garbage // collector and finalization class Chair {   static boolean gcrun = false;   static boolean f = false;   static int created = 0;   static in...

我刚开始学习JAVA,有一个例子我不太明白:
//: c04:Garbage.java
// Demonstration of the garbage
// collector and finalization

class Chair {
  static boolean gcrun = false;
  static boolean f = false;
  static int created = 0;
  static int finalized = 0;
  int i;
  Chair() {
    i = ++created;
    if(created == 47) 
      System.out.println("Created 47");
  }
  public void finalize() {
    if(!gcrun) {
      // The first time finalize() is called:
      gcrun = true;
      System.out.println(
        "Beginning to finalize after " +
        created + " Chairs have been created");
    }
    if(i == 47) {
      System.out.println(
        "Finalizing Chair #47, " +
        "Setting flag to stop Chair creation");
      f = true;
    }
    finalized++;
    if(finalized >= created)
      System.out.println(
        "All " + finalized + " finalized");
  }
}

public class Garbage {
  public static void main(String[] args) {
    // As long as the flag hasn't been set,
    // make Chairs and Strings:
    while(!Chair.f) {
      new Chair();
      new String("To take up space");
    }
    System.out.println(
      "After all Chairs have been created:n" +
      "total created = " + Chair.created +
      ", total finalized = " + Chair.finalized);
    // Optional arguments force garbage
    // collection & finalization:
    if(args.length > 0) {
      if(args[0].equals("gc") || 
         args[0].equals("all")) {
        System.out.println("gc():");
        System.gc();
      }
      if(args[0].equals("finalize") || 
         args[0].equals("all")) {
        System.out.println("runFinalization():");
        System.runFinalization();
      }
    }
    System.out.println("bye!");
  }
} ///:~
在这个程序中的:
public void finalize() {
    if(!gcrun) {
      // The first time finalize() is called:
      gcrun = true;
      System.out.println(
        "Beginning to finalize after " +
        created + " Chairs have been created");
    }
是从什么时候开始执行的,还有就是被执行了多少次?


|
Chair类的实例被创建后没有被引用,他们将被java的内存回收机制看作无用存储单元而收回,这个回收机制是作为一个低优先级的线程在后台运行的。finalize()是一个实例方法,它在实例不可用之后,回收机制回收实例之前被调用。回收机制只能将实例所占的内存资源收回,而实例可能还占有其它资源,比如打开的文件等等,这些资源可由finalize()负责收回。

程序中当回收了47个chair实例后,停止创建chair。但是finalize()被调用的次数应等于chair被创建的次数。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 重装服务器后IIS网站错误(应用程序中的服务器错误)
  • 为什么我在java程序里启动的一个程序在java程序关闭后,该程序的所有进程都关掉了
  • windows server2008上PowerBuilder程序系统错误解决方法
  • Linux 编程怎么样在程序开启一个程序,和关闭一个程序?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 请问从一个java程序中如何调用另一java程序,并控制可以其状态(最小化、最大化、结束程序),还有怎样知道那个被调用的程序结束。
  • 程序员的八种级别,你属于哪一级?
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 我的程序是用c写的gtk+程序,有个函数的参数要传给它图片的文件名,但是图片和原程序不在同一目录下怎么办?怎么在程序里指定文件的路径
  • 在docker容器中通过apt-get安装新的程序
  • linux下通过crond实现自动执行程序 iis7站长之家
  • linux下通过crond实现自动执行程序
  • 我写了个linux下的网络程序,程序在多个电脑间通信,但是我没有多个电脑,怎么调试这样的程序啊?
  • http协议介绍,文件上传分析及程序举例
  • 在java控制台程序中,可以用System.exit(0);使用一个程序终止,那么在servlet中如何使一个servlet程序终止呢?
  • 程序员赚钱致富的6种方法
  • 程序调用脚本,脚本启动另一个程序,如何让原始程序彻底释放资源?
  • HASH查找的程序实现及性能分析
  • python计算程序开始到程序结束的运行时间和程序运行的CPU时间
  • 程序员为了健康必看!早晨空腹喝水,是对还是错?
  • linux下,一个程序如何向另一个程序发送消息,另一个程序如何接收


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3