JAVA编译程序(JAVAC.EXE)仅仅是执行将JAVA源程序(*.JAVA)翻译为JVM可执行代码-JAVA字节码,也就是说仅仅是语法检查。java运行程序(java.exe)有jvm中的解释器来执行解释执行过程分三步进行:代码的装入、代码的校验和代码的执行。装入代码的工作由“类装载器”(CLASS LOADER)来完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的所继承的类和被调用的类,当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其它办法可以相互影响。在本
地计算机的所有类都在同一地址空间内,而所有从外部引进的类,都有自己独立的一个名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们和外部引进的类不会相互影响。当装入运行程序需要的所有类后,解释器便可以确定整个可执行程序的内存布局,解释器为符号引用与特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内存布局,JAVA很好的解决了由超类改变
而使子类崩溃的问题,同时也防止了代码对地址的非法访问。
随后,被装入的代码由字节码校验器进行检查。检验器可发现操作数栈溢出、非法数据类型转化等多种错误。通过校验后,代码便开始执行了。 |