代码之家  ›  专栏  ›  技术社区  ›  Ande Turner

Java:“静态”方法

  •  5
  • Ande Turner  · 技术社区  · 17 年前

    当我调用静态方法时,比如:

    Something.action();
    

    由于没有创建实例,静态方法的类将在内存中保存多长时间?

    如果我调用相同的方法,由于不存在实例,每次调用都会重新加载类吗?

    调用时只加载单个静态方法,还是即使只使用一个静态方法,也将类的所有方法和静态方法加载到内存中?

    4 回复  |  直到 17 年前
        1
  •  11
  •   krosenvold    17 年前

    除非您配置了permgenspace的垃圾回收,否则该类将留在内存中,直到vm退出。整个类加载了所有静态方法。

        2
  •  4
  •   Gowri    17 年前

    该类将保留在内存中,直到加载该类的类加载器保留在内存里。因此,如果该类是从系统类加载器加载的,据我所知,该类永远不会被卸载。

    如果你想卸载一个类,你需要:

    1. 使用自定义类加载器加载类和引用该类的所有类
    2. 完成该类后,释放对该类的所有引用,即确保周围没有该类的对象实例
    3. 通过释放加载这些类的自定义类加载器实例,卸载该类和所有引用它的类。
        3
  •  2
  •   Guillaume    17 年前

    在某些配置中,类甚至在您进行调用之前就已加载。我们使用了BES(Borland Enterprise Server),但Solaris生产服务器出现了问题,在应用程序启动时,所有引用的类都被递归加载。这意味着,当我们的应用程序的主类被加载时,应用程序服务器加载了该类导入部分中引用的所有类。..递归。

    顺便说一句,除非你在内存非常有限的环境中运行,或者你正在加载大量不必要的类,否则你不应该太关心内存中加载的类的内存使用情况。

        4
  •  1
  •   boutta tomriddle_1234    17 年前

    这个 某物 类应在调用方类加载时加载。正如克罗森沃尔德所说,它会一直呆在那里,直到VM退出。