Java Virtual Machine 就是指Java虚拟器,以下简称VM.关于VM的概念,最早出自CPU模拟器,众所周知的PC上的游戏机模拟器采用的便是和Java VM类似的技术.java source code被编译成byte code后,其实已经是很类似机器代码了,只不过没有真正能运行这类code的CPU而已,于是为了能达到在不同平台上运行的目的,VM的概念被大力推广. 从简单的角度说,VM其实就是把java bytecode 翻译成特定的机器代码, 这和解释型编程语言不同,我们会在下面讲到.
 





    第一代的VM大多采用直接解释的方法,也就是说一句一句地把bytecode翻译成机器代码. 但这里有个缺点,如遇到循环, VM就不得不一次次重复翻译已经被翻译过的代码. 而每一次翻译均需消耗一定的cpu时间. 于是出现了第二代的VM - JIT (Just In Time Compiler)它只在bytecode需要被翻译时才做翻译工作.怎么实现呢? 打个比方,JIT VM可以事先把一段bytecode翻成machine code,并把这段code放进buffer, 当运行循环是,就反复调用这段翻译好的代码!
JIT的效率取决于他分析重复调用的本领,把翻译的工作量限制到最小,以便让出CPU时间来运行程序逻辑.  





   第三代的VM叫hotspot,我们以后做介绍.  





   有了VM以后等于有了一个虚拟的CPU, 但我们还需要一定的外部设备来帮助完成计算任务,于是出现了JNI, 它的作用在不同的场合有不同的含义. 有时你可一用JNI直接写一个设备驱动程序, 有时JNI可被作为lightweight wrapper来封装本地系统的资源.再加上Java本身提供的标准库, VM提供了再多平台应用的环境!在一个系统中JVM往往不是唯一的, 如果你在win32中安装了JDK,IE和Netscape,哪很有可能你已经有了三种不同的Virtual Machine. 至于你的程序在那个VM上运行,完全取决于你系统的设置.
大体上如果是运行applet,那么browser的VM会成为默认的平台. 当然你可以用jdk的plug-in取代IE的MS JVM.  





   每台win32系统都包含了一个MS implement的VM,如果安装了Java SDK哪你就可以用jview来从command line启动VM process. 你可以在一台电脑上同时运行几个同种或不同种的VM, 每一个都会运行在独立process中.  





下面是一些系统的属性,你可以从中获得关于VM的一些讯息!  

用 System.getProperty(String propertyName)  





properyName:        含义:  

-----------------------------------------------------  

java.version -  JRE version  





java.vendor - JRE vendor   





java.vendor.url - Vendor URL  





java.home -  Installation directory  





java.vm.specification.version  - JVM 标准的版本  





java.vm.specification.vendor - JVM 标准的开发商  





java.vm.specification.name -         





java.vm.version - JVMachine implementation version:   





java.vm.vendor - JVM implementation vendor  





java.vm.name - JVM implementation name  

      

java.specification.version -  JRE specification version  





java.specification.vendor - JRE specification vendor  





java.specification.name - JRE specification name:   





java.class.version - Class format version number:   





java.class.path - Java CLASSPATH   

浅谈Java Virtual Machine的更多相关文章

  1. 浅谈Java语言环境搭建-JDK8

    title: 浅谈Java语言环境搭建-JDK8 blog: CSDN data: Java学习路线及视频 1.What's the JDK,JRE JDK(Java Development Kit ...

  2. Java Hour 58 Java Virtual Machine

    每每谈到Java Virtual Machine, 你必须意识到这个有三种意思: 1 一个抽象的指南 2 一个具体的实现 3 一个运行时的实例 JVM 的生命周期 每个运行时JVM 实例都是为一个特定 ...

  3. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  4. 浅谈Java中的equals和==(转)

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...

  5. 浅谈Java中的对象和引用

    浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...

  6. 浅谈Java中的equals和==

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...

  7. fail to create java virtual machine..

    今天打开zend stdio 的时候 出现的错误  fail to create java virtual machine... 然后找度娘了,,都说改xxxxx, 我打开360  ,把内存清理了一遍 ...

  8. 浅谈JAVA集合框架

    浅谈JAVA集合框架 Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection cl ...

  9. Failed to create the Java Virtual Machine.问题的解决

    运行Eclipse,出现了"Failed to create the Java Virtual Machine."错误: 解决的办法是在Eclipse的解压目录下找到eclipse ...

随机推荐

  1. docker:(3)docker容器挂载宿主主机目录

    有一项重要的参数 -v 目录挂载,就是让容器内部目录和宿主主机目录关联起来,这样就可以直接操作宿主主机目录而不用再操作具体容器了 比如在2中,我们要发布一个war包,是通过 sudo docker c ...

  2. 修改MySQL 5.7.9版本的root密码方法以及一些新变化整理

    MySQL 5.7版本开始,增强密码验证机制,网上说安装的时候会在/root/.mysql_secret  文件中生成默认密码,这一点自 5.7.6版本以后也去掉了. 针对如果生成默认密码,网上有一个 ...

  3. ASP.NET Core中使用IOC三部曲(一.使用ASP.NET Core自带的IOC容器)

    前言 本文主要是详解一下在ASP.NET Core中,自带的IOC容器相关的使用方式和注入类型的生命周期. 这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行百度. 目录 ...

  4. [转]Python 资源大全中文版

    摘自:https://github.com/jobbole/awesome-python-cn 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesom ...

  5. fastboot模式

    快速启动. 在安卓手机中fastboot是一种比recovery更底层的刷机模式. fastboot是一种线刷,就是使用USB数据线连接手机的一种刷机模式. recovery是一种卡刷,就是将刷机包放 ...

  6. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)

    前言: 在本系列第一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](一)>中,我为大家介绍了搭建空白解决方案以 ...

  7. Java面向对象接口的应用实例练习

    interface USB { public void open(); public void close(); } class Upan implements USB { public void o ...

  8. msf

    show exploit show payload msf使用数据库加快搜索,不然每次都等半天 service postgresql startmsfdb reinitmsf > db_rebu ...

  9. html日历(2)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. 从零开始学习前端开发 — 12、CSS3弹性布局

    一.分栏布局 1.设置栏数column-count:数值; 2.设置每栏的宽度column-width:数值+单位; 注:当设置了column-width,column-count会失效,二者设置其一 ...