CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2EE / EJB / JMS

程序的问题!

楼主Sunny_pan(天奇)2005-04-03 21:39:51 在 Java / J2EE / EJB / JMS 提问

//c04:Garbage.java  
  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)  
      {  
        gcrun   =   true;  
        System.out.println("Beginning   to   finalize   after   "   +   created   +   "   chairs   have   been   created");  
      }  
      if   (i   ==   47)  
      {  
      System.out.println("Fanalizing   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)  
    {  
      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   );    
    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!");  
    }  
  }  
   
  问题:  
    1.调用finalize()是否是随机的?  
    2.为什么要用gcrun   =   true和f   =true?  
  问题点数:20、回复次数:8Top

1 楼zhutouzip(醒了的鸟)回复于 2005-04-03 21:55:05 得分 0

1:finalize()的调用是随机的,当jvm判断内存不足时会调用这个方法!我们不知道jvm何时调用该方法!  
  2:标志位,用于判断何时进行垃圾回收了!Top

2 楼Sunny_pan(天奇)回复于 2005-04-03 22:02:40 得分 0

请问一下!标志位是怎么确定的?在那里可以找到有关这方面的文献.谢谢!!!!!!Top

3 楼zhutouzip(醒了的鸟)回复于 2005-04-03 22:12:51 得分 0

标志位是自己设定的,没有其它的资料!  
  Top

4 楼Sunny_pan(天奇)回复于 2005-04-03 22:39:48 得分 0

为什么我去掉gcrun   =   true;时候一直会运行   System.out.println("Beginning   to   finalize   after   "   +   created   +   "   chairs   have   been   created");Top

5 楼zhutouzip(醒了的鸟)回复于 2005-04-03 22:49:09 得分 0

gcrun   =   true;  
  你将它去掉的话,gcrun的值一直是false,当jvm调用finalize方法的时候,if语句一直成立,当然会不断输出那一行啊,finalize方法在何时调用不确定的,调用次数也不确定,并不是只调用一次!Top

6 楼Sunny_pan(天奇)回复于 2005-04-03 23:34:03 得分 0

但是gcrun   =   true;没有将值返回给if哪!也就是说if调用时并不会知道gcrun已经变成true啦.我程序中并没有将值return回去哪!@Top

7 楼zhutouzip(醒了的鸟)回复于 2005-04-03 23:37:03 得分 20

gcrun是Chair类的static成员,任何一个对象对它的修改都会造成它的值的改变,它相当于c中的全局变量啊,并不需要什么return的!  
  楼主以前是学c的吧?Top

8 楼Sunny_pan(天奇)回复于 2005-04-03 23:45:56 得分 0

了解!谢谢.我没有注意是用static的.谢谢Top

相关问题

  • 程序员?非程序员?-----没程序。
  • 程序中的程序
  • 源程序
  • 程序人生?
  • 排课程序
  • 向导程序
  • 幕后程序
  • 一段程序
  • 程序求简
  • 程序纠错?

关键词

  • jvm
  • gcrun
  • chair
  • 调用
  • finalize
  • 谢谢
  • println
  • created
  • 方法
  • args

得分解答快速导航

  • 帖主:Sunny_pan
  • zhutouzip

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo