当程序主动加载某个类时,如果该类还未被加载到内存中,系统会通过加载连接初始化三个步骤来对该类进行初始化。类加载是将类的class文件读入内存中并为之创建一个Class对象,同时类加载器通常无须等到首次使用该类才加载该类,java虚拟机允许预先加载某些类。一旦一个类被加载到jvm中同一个类就不会被再次载入了。jvm类加载时使用缓存机制,缓存机制将会保证所有被加载过的Class都会被缓存,当程序中需要使用某个Class时类加载机制先ongoing缓存中搜寻该Class只有当缓存中不存在该Class对象时,系统才会重读取该类对应的二进制数据,并将其转换成Class对象,并存入cache。当Java程序运行结束时,jvm进程结束,该进程在内存中的状态将会丢失。其实当我们调用Java命令运行某个Java程序时该命令将会启动一条Java虚拟机进程。不管Java程序多么复杂,改程序启动了多少个线程,他们都处于该Java虚拟机进程里,同一个jvm的多有线程所有变量都处于同一个进程里他们都是用该jvm进程的内存区。其实内存中的class对象占用的内存空间很小,因为我们所需要的很多类都已经预先加载到内存中,当我们启动jvm执行java.exe命令时,根加载器负责加载Java的核心类。因为我们程序中主要的还是核心库里的一些东西
当然还有其他的类加载器,
你可以看一看类加载这方面的知识。 |