最近发现一个很奇怪的事情,就是在类中静态变量会重新初始化我在一个类中写了一个静态变量用来记录new的个数,也就是记录该类总共实例化了几个对象,但是程序运行几个小时后发现静态变量初始化了?真不解网上查了下,先发下网上的原文:
JVM中的Class只有满足以下三个条件,才能被GC回收,也就是该Class被卸载(unload):
  1 - 该类所有的实例都已经被GC,也就是JVM中不存在该Class的任何实例。
  2 - 加载该类的ClassLoader已经被GC。
  3 - 该类的java.lang.Class 对象没有在任何地方被引用,如不能在任何地方通过反射访问该类的方法对于1的看法,如果JVM发现不存在该Class的任何实例就卸载该Class,那静态变量不是只能存常量,不能用来记录什么值了吗
对于2的看法,什么情况下加载该类的ClassLoader会被GC? 不解
对于3的看法,跟1差不多大牛们,能帮忙解答下这些很奇怪的问题吗,谢谢了啊

解决方案 »

  1.   

    不是吧? 不会是代码有笔误,把值在其他地方改了吧? 
      

  2.   

    楼主我猜也是楼主哪里写错了
      

  3.   

    程序的细节方面 好好检查。。你想不到的问题 往往是一个小的细节造成的
      

  4.   

    是的,也许你的程序就是一个字母或者一个函数写的不对,也与可能是一个分号的问题,楼主好好的检查一遍就会有结果的。