2012-06-06 39 views
2

何时在JVM中加载类?它们是否在服务器启动时或者有类参考时加载?我的假设是,所有的类都会像jboss这样的服务器启动,然后有一个叫做lazyloading的东西被加载。在JVM中加载类

实际上加载的含义是什么?这是否意味着在JVM内存中存在此.class以及所有方法,变量(包括实例,静态变量方法)并且可用于执行。我知道ClassLoader为需要加载的Java类定位字节码,读取字节码,检查在particualr类中使用的其他类的refrencces,并通过创建java.lang.Class类的实例来加载它们。这使得该类可用于JVM执行

方法是否也随类一起加载到JVM中?我的假设是方法只在线程的堆栈内存中。那么什么是方法记忆?它是堆栈还是堆栈的一部分?

是否只有静态方法与类加载一起加载而不是实例方法?我知道,静态的bock在类被获取时被执行,并且所有的静态变量都被初始化。

如果这些疑惑得到解决,请提前致谢。

回答

2

这些都是关于JVM的基本问题,Google肯定可以帮你解答。

对于大家的一些问题(特别是关于实际装载过程中的问题),你可以看看这里,例如:http://www.securingjava.com/chapter-two/chapter-two-7.html

短,刚开始时,只是基本的(和信任)类由JVM加载。接下来,根据需要创建其他类加载器(例如引导类加载器),它们将加载更多的类。在成功加载类之前,必须加载它所依赖的所有类。

加载的类以各种形式(这是特定于JVM)存储在内存中,但总是暴露一个Class对象。类中的所有东西(方法,变量等)都会被加载。这并不意味着该类也被编译(稍后编译,需要执行某个方法时)。

方法变量的分配发生在栈(原语)或堆上。

静态变量的初始化和静态块的执行发生在类被加载之后,在它的任何实例被创建之前。