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的时候。

JAVA虚拟机简介的更多相关文章

  1. java虚拟机-简介

    一.什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现 ...

  2. Java虚拟机性能管理神器 - VisualVM(1) 简介 - JVM轻量级监控分析神器

    目录(?)[-] 一VisualVM是什么 二如何获取VisualVM 三获取那个版本 四VisualVM能做什么 显示JAVA应用程序配置和运行时环境 显示本地和远程JAVA应用程序运行状态 监控应 ...

  3. Java虚拟机(一):JVM简介

    JVM简介 Java虚拟机(JVM)是由Java虚拟机规范定义的,其上运行的是字节码指令集.这种字节码指令集包含一个字节的操作码(opcode),零至多个操作数(oprand),虚拟机规范明确定义了每 ...

  4. java语言与jvm虚拟机简介

    一.java语言 1.1 支持面向对象编程oop 强调支持,因为java同样可以面向过程编程. oop的三大特性是:封装.继承.多态. 封装主要针对成员变量而言,oop的思想要求成员变量均为私有,不应 ...

  5. 深入理解java虚拟机(六)字节码指令简介

    Java虚拟机指令是由(占用一个字节长度.代表某种特定操作含义的数字)操作码Opcode,以及跟随在其后的零至多个代表此操作所需参数的称为操作数 Operands 构成的.由于Java虚拟机是面向操作 ...

  6. Java虚拟机详解(一)------简介

    本系列博客我们将以当前默认的主流虚拟机HotSpot 为例,详细介绍 Java虚拟机.以 JDK1.7 为主,同时介绍与 JDK1.8 的不同之处,通过Oracle官网以及各种文献进行整理,并加以验证 ...

  7. 浅谈java虚拟机|系列1|架构简介

    今天开了一个专题.谈谈我们java程序员每天面对的java虚拟机(jvm). 本质上来说,jvm分两部分:编译器(compiler)和运行时(runtime). 所谓的编译器,简单来说,他就是个翻译机 ...

  8. JVM学习(1)——通过实例总结Java虚拟机的运行机制

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: JVM的历史 JVM的运行流程简介 JVM的组成(基于 Java 7) JVM调优参数:-Xmx和-Xms ...

  9. Java虚拟机浅探

    简介 对于java开发人员了来说,对java虚拟机肯定有着或多或少的了解.因为有了虚拟机的存在,才会使得java的内存管理变得那么方便,不再像C++那样使用new/delete来直接管理内存.知名的j ...

随机推荐

  1. DISC免费性格测试题

    现在给大家推荐一款世界500强和猎头公司招聘人才时用的DISC性格测评,用在找对象方面也比较合适.大家不妨看下自己的性格,就知道该找什么样的意中人啦--- 在每一个大标题中的四个选择题中只选择一个最符 ...

  2. Python学习笔记——正则表达式入门

    # 本文对正则知识不做详细解释,仅作入门级的正则知识目录. 正则表达式的强大早有耳闻,大一时参加一次选拔考试,题目就是用做个HTML解析器,正则的优势表现得淋漓尽致.题外话不多讲,直接上干货: 1. ...

  3. C# 获取随机可用端口号

    TCP与UDP段结构中端口地址都是16比特,可以有在0---65535范围内的端口号.对于这65536个端口号有以下的使用规定: (1)端口号小于256的定义为常用端口,服务器一般都是通过常用端口号来 ...

  4. DataGridView出现大红叉--在使用多线程访问数据源时

    datagridview 的数据源操作在一个方面里面处理 不要多个地方处理 并且处理的时候要加锁 红叉 应该是多线程操作出现的. try catch  只是起到 捕获异常的功能,但是一旦出现了这种错误 ...

  5. javax.servlet不存在的问题

    摘自:http://blog.csdn.net/tgeh23/article/details/2216682     最近在学习servlet,看书看的似乎还比较理想就想上机试下,这一试就发现,问题来 ...

  6. PS制作独特火焰立体文字

    效果图中的文字部分并不复杂,为简单的立体字,用图层样式及手工复制就可以做好.火焰部分稍微有点复杂,用动感及火焰素材叠加,然后再加上火花及炫光等渲染出动感效果即可.最终效果 素材下载:本教程中需要用到的 ...

  7. linux JAVA JDK环境配置

    export JAVA_HOME=/usr/local/jdk1.7.0_45export JRE_HOME=/usr/local/jdk1.7.0_45/jreexport CLASSPATH=.: ...

  8. 意犹未尽而来的第一篇Android 逆向

    游戏:咕噜王国大冒险 平台:android 目标: 1. 去除乱七八糟提示(本篇目标) 2. 去除google弹窗 3. 破解“all stages” 破文开始: 1. 使用APKIDE反编译:搜索字 ...

  9. 蓝牙音箱bose soundlink mini2链接mac后itunes自动启动的问题解决

    1.在应用程序列表中复制一个应用重命名为DoNothingApp.app(非系统应用才可以成功复制) 2.打开terminal执行该命令(执行后需要输入密码),注意mv和iTunes.app后分别有一 ...

  10. 10款无限滚动自动翻页jquery插件

    2012年3月29日 无限滚动自动翻页可以说是web2.0时代的一项堪称伟大的技术,它让我们在浏览页面的时候只需要把滚动条拉到网页底部就能自动显示下一页的 结果,改变了一直以来只能通过点击下一页来翻页 ...