JAVA虚拟机简介
Java虚拟机定义
Java虚拟机有多层含义
一套规范:Java虚拟机规范。定义概念上Java虚拟机的行为表现
一种实现:例如HotSpot,J9,JRockit。需要实现JVM规范,但具体实现方式不需要与“概念中”的JVM一样。
一个运行中的实例,某个JVM实现的某次运行的实例.
只要输入为符合规范的Class文件即可执行。并非一定要执行Java程序,可以支持其它语言,像Scala、Clojure、Groovy、Fantom、Fortress、Nice、Jython、 JRuby、Rhino、Ioke、Jaskell、(C、Fortran)
JVM和JRE、JDK的关系
JVM:Java Virtual Machine,负责执行符合规范的Class文件。
JRE:Java Runtime Environment,包含JVM和类库。
JDK:Java Development Kit,包含JRE和一些开发工具,如javac。
JVM实例和JVM执行引擎实例
JVM实例对应了一个独立运行的java程序,而JVM执行引擎实例则对应了属于用户运行程序的线程;也就是JVM实例是进程级别,而执行引擎是线程级别的。
JVM的基本结构
类加载子系统
JVM的类加载是通过ClassLoader及其子类来完成的,类的层次关系和加载顺序可以由下图来描述:
Bootstrap ClassLoader负责加载$JAVA_HOME/jre/lib里所有的类库到内存,Bootstrap ClassLoader是JVM级别的,由C++实现,不是ClassLoader的子类,开发者也无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。
Extension ClassLoader负责加载java平台中扩展功能的一些jar包,主要是由 sun.misc.Launcher$ExtClassLoader实现的,是一个java类,继承自URLClassLoader超类。它将负责%JRE_HOME/lib/ext目录下的jar和class加载到内存,开发者可以直接使用该加载器。
App ClassLoader负责加载环境变量classpath中指定的jar包及目录中class到内存中,开发者也可以直接使用系统类加载器。
Custom ClassLoader属于应用程序根据自身需要自定义的ClassLoader(一般为java.lang.ClassLoader的子类)在程序运行期间,通过java.lang.ClassLoader的子类动态加载class文件,体现java动态实时类装入特性,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader。自定义ClassLoader在某些应用场景还是比较适用,特别是需要灵活地动态加载class的时候。
建议继续学习:
- xen虚拟机的迁移类型 (阅读:1900)
- Erlang虚拟机基础设施dtrace探测点介绍和使用 (阅读:1660)
- VirtualBox 虚拟机镜像文件 UUID 已存在问题 (阅读:1293)
- Java -- Hotspot虚拟机调优与GC垃圾回收策略 (阅读:1141)
- 在 Unity3D 的 Mono 虚拟机中嵌入 Lua 的一个方案 (阅读:1035)
- 编程珠玑番外篇之番外篇-O 中间语言和虚拟机漫谈 (阅读:945)
- MooseFS之虚拟机惹的祸 (阅读:998)
- Xen 虚拟机的 NAT 网络配置 (阅读:899)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Eric 来源: JavaRanger - 专注JAVA高性能程序开发、JVM、Mysql优化、算法
- 标签: 虚拟机
- 发布时间:2015-12-26 20:29:08
- [51] Oracle MTS模式下 进程地址与会话信
- [49] 图书馆的世界纪录
- [49] IOS安全–浅谈关于IOS加固的几种方法
- [49] 如何拿下简短的域名
- [45] android 开发入门
- [44] 【社会化设计】自我(self)部分――欢迎区
- [42] 读书笔记-壹百度:百度十年千倍的29条法则
- [42] 界面设计速成
- [41] 视觉调整-设计师 vs. 逻辑
- [40] Go Reflect 性能