2

类何时加载到 JVM 中?它们是在服务器启动时加载还是在有类引用时加载?我的假设是所有类都在像 jboss 这样的服务器启动时被加载,但是有一种叫做延迟加载的东西。

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

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

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

如果这些疑问得到解决,请提前感谢。

4

1 回答 1

2

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

对于您的一些问题(尤其是有关实际加载过程的问题),您可以查看此处,例如:http ://www.securingjava.com/chapter-two/chapter-two-7.html

简而言之,一开始,JVM 只加载基本(和受信任的)类。接下来,根据需要创建其他类加载器(例如引导类加载器),它们将加载更多类。在一个类被成功加载之前,它所依赖的所有类都必须被加载。

加载的类以各种形式存储在内存中(这是 JVM 特定的),但 Class 对象始终是公开的。类中的所有内容(方法、变量等)都会被加载。这并不意味着该类也被编译(编译发生在稍后,当需要执行方法时)。

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

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

于 2012-06-08T15:25:41.710 回答