JAVA虚拟机实例学习笔记一
1.编译顺序:
编译器 虚拟机 虚拟机
java源文件*.java------->字节码*.class------>类装载器--->执行引擎
(来源www.iocblog.net)
一个.class文件只能包含一个类或接口。因此.java文件中定义了多少类,编译时就会生成多少.class文件(内部类不算)。
2.java程序可以选择两种方式访问底层系统,由程序员选择:
(1).通过java程序调用javaapi调用本地方法,访问底层系统,与平台无关。
(2).通过java程序直接调用本地方法,访问底层系统与平台相关。
本地方法即操作系统提供的方法。
3.类装载器:
装载java编译器编译好的字节码*.class和java api的字节码到方法区。
java有两种类装载器:
(1).启动类装载器:系统唯一,属于虚拟机的一部分,用特定语言编写(与虚拟机体层语言相通)使用默认方式装载类,主要用来装载核心类库。
(2).用户自定义类装载器:可有任意多个,用java编写,属于java应用程序的一部分,能被编译成字节码,并被虚拟机所装载。
一个装载器装载一个类及其该类所调用的一切类,使他们相互联系,并形成一个命名空间(name space),每一个类装载器对应一个命名空间。即java中名字空间的原理。
类装载器成线形排列,自底向上,顶部为启动类装载器。除启动类装载器外,其他类装载器都由用户实例化,用来装载不同的类。当要装载一
个类时,底部的装载器试图将该类交给父装载器装载,而该父类又试图交给他的父类装载,一直向上,直到启动类装载器。若父类装载器无法
装载,则交给子类装载器装载,子类装载能装载的部分,将余下部分交给他的子类,直到底部。如:
装载器a,b,c,d,e,f,启动
a--->b--->c--->d--->e--->f--->启动
当有一个类fun需要被装载时,他会一直上溯到顶部即启动类装载器。如果启动类装载器无法装载fun则交给f装载,f装载能装载的部分,将其
余部分交给e,然后一直这样下去。
如上所述,运行过程中每个类装载器装载的类形成一个运行时包,同一运行时包里的类可以互相访问,但不能访问包外部的类。
Tag: JAVA虚拟机
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。