Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Classloader JVM中的类加载_Classloader - Fatal编程技术网

Classloader JVM中的类加载

Classloader JVM中的类加载,classloader,Classloader,该类何时加载到JVM中?它们是在服务器启动时加载的,还是在有类的引用时加载的?我的假设是,所有类都是在像jboss这样的服务器启动时加载的,但是还有一种叫做lazyloading的东西 另外,加载实际上意味着什么?这是否意味着JVM内存中有这个.class以及所有方法、变量(包括实例、静态变量和方法)可供执行。我知道ClassLoader为需要加载的Java类定位字节码,读取字节码,检查particualr类中使用的其他类的引用,并通过创建Java.lang.class类的实例来加载它们。这使类

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

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

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

是否只有静态方法与类加载一起加载,而不是实例方法?我知道,当类被初始化,所有静态变量也被初始化时,静态bock就会被执行


如果这些疑问得到澄清,请提前感谢。

这些都是关于JVM的基本问题,谷歌肯定会帮你找到答案

对于您的一些问题(特别是关于实际加载过程的问题),您可以在这里查看,例如:

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

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

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

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