Java虚拟机(六):Java编程和执行过程
来源:互联网 发布:网络的攻击与防范 编辑:程序博客网 时间:2024/05/02 00:16
Java编程和执行的整个过程包含了3个重要的机制
1.编译机制
2.类加载机制
3.类执行机制
一.编译机制
编译机制的作用主要是将.java文件转换为.class文件。其中转换后的.class包含了元数据,方法信息等一些信息。比如说元数据就包含了Java文件中声明的常量,也就是我们所说的常量池。方法信息就包含了Java文件中声明的方法,表达式语句等。
二.类加载机制
2.1类如何进行加载
JVM是通过一个称为ClassLoader东西来加载class文件的,每当JVM启动,它就会生成三个ClassLoader,它们分别是Bootstrap Loader,ExtClassLoader和AppClassLoader。这三个ClassLoader作用是不同的,它们所加载的class文件也是不同的。
(1)Bootstrap Loader,它所加载的是JVM中最底层的类。
(2)ExtClassLoader是用来加载Java的一些库的。
(3)AppClassLoader也称System ClassLoader,它的搜索路径是由java.class.path来指定的。
JVM加载class文件时采用了双亲委托模型,当需要加载一个class文件时,JVM会首先让这个加载器的父亲去加载,如果父亲无法加载,JVM会让父亲的父亲去加载,如果仍然无法加载,则让最初的加载器去加载。这三个加载器的委托关系如图:
从上图可以看出,每当加载我们自己所编写的class文件时,首先会交给AppClassLoader的父亲ExtClassLoader去加载,如果它不能加载则会交给ExtClassLoader的父亲Bootstrp Loader去加载,如果仍无法加载的情况下则交给AppclassLoader加载。
在加载完Class文件之后,ClassLoader如何将class文件变成一个java类的。在ClassLoader类中有一个非常重要的方法叫findClass,它接收要加载的类的名字作为它的参数,在该方法里会找到class文件并读取文件中的内容到一个byte数组,然后再调用另外一个重要的方法defineClass,该方法能够将byte数组中的内容转化成一个相应的Class Object。defineClass方法的调用是通过JNI方式的,它的实现是用C++语言实现的本地化方法。
2.2对于类的加载方式
主要有两种方法:一种是隐式的,一种是显示的。
对于隐式的方法:主要是使用new关键字。
对于显示的方法:可以由java.lang.Class的forName()方法加载,也可以由java.lang.ClassLoader的loadClass()方法加载。
(1)ClassLoader.loadClass():使用指定的Classloader进行装载,结果返回一个类。
(2)Class.forName():使用当前类的Classloader进行装载,结果也是返回一个类。
2.3类加载的委托机制的好处-安全性
JVM装载类使用的是“全盘负责委托机制”。
全盘负责,指当一个ClassLoader装载类的时候,除非显示的使用另外一个ClassLoader,该类所依赖和引用的其他类都有这个ClassLoader载入。
委托机制,指先委托父转载器寻找目标类,只有在找不到的情况下才从自己的类路径中查找并装载类,这一点是从安全角度考虑的,试想如果有人编写了一个恶意的基础类,比如String类,并装载到JVM中将会引起多么可怕的后果呢。但是,由于有了全盘负责委托机制,String类永远是有根装载器装载,这样就避免了事件的发生。另外,我们经常遇到的NoSuchMethodError的错误往往就是因为加载了不同版本的包造成的。
三.类的执行机制
JVM是基于栈的体系结构来执行class字节码的。线程创建后,都会产生程序计数器(PC)和栈(Stack),程序计数器存放下一条要执行的指令在方 法内的偏移量,栈中存放一个个栈帧,每个栈帧对应着每个方法的每次调用,而栈帧又是有局部变量区和操作数栈两部分组成,局部变量区用于存放方法中的局部变 量和参数,操作数栈中用于存放方法执行过程中产生的中间结果。
四.参考
1.http://blog.csdn.net/cutesource/article/details/59045422.http://blog.csdn.net/linyajun/article/details/3729121
- Java虚拟机(六):Java编程和执行过程
- Java基础教程3:Java虚拟机和程序执行过程
- Java虚拟机(六)
- Java虚拟机(六)
- java虚拟机之代码编译和执行的过程
- Java虚拟机方法的执行过程简述
- JAVA虚拟机系列(六)
- Java虚拟机类加载和执行机制
- Java虚拟机类加载和执行机制
- Java虚拟机类加载和执行机制
- Java虚拟机类加载和执行机制
- Java虚拟机类加载和执行机制
- Java虚拟机类加载和执行机制
- Java虚拟机类加载和执行机制
- Java虚拟机(六)-JVM性能优化
- Java虚拟机--垃圾回收算法(六)
- 【Java】虚拟机执行引擎
- java虚拟机执行子系统
- Win7下modelsim编译Xilinx库
- 职业院校人体解剖学实验室文化建设研究
- 第2章 2.10 Servlet介绍
- linux学习之shell脚本 ------- 控制流结构
- JVM学习笔记(一)------基本结构
- Java虚拟机(六):Java编程和执行过程
- 运算符重载实例——Nybble
- CSS从大图片上截取小图标的使用
- USACO 5.3 Network of Schools
- Android 自定义View (一)
- 寒假项目1-动态链表体验(改造)(5)
- 人体解剖学标本长廊的构成、管理及其优势
- 在这个梦想冷却的年代
- Sybase: get the list of users who have sa_role role