浅谈Java Virtual Machine
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的更多相关文章
- 浅谈Java语言环境搭建-JDK8
title: 浅谈Java语言环境搭建-JDK8 blog: CSDN data: Java学习路线及视频 1.What's the JDK,JRE JDK(Java Development Kit ...
- Java Hour 58 Java Virtual Machine
每每谈到Java Virtual Machine, 你必须意识到这个有三种意思: 1 一个抽象的指南 2 一个具体的实现 3 一个运行时的实例 JVM 的生命周期 每个运行时JVM 实例都是为一个特定 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈Java中的equals和==(转)
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...
- 浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
- 浅谈Java中的equals和==
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...
- fail to create java virtual machine..
今天打开zend stdio 的时候 出现的错误 fail to create java virtual machine... 然后找度娘了,,都说改xxxxx, 我打开360 ,把内存清理了一遍 ...
- 浅谈JAVA集合框架
浅谈JAVA集合框架 Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection cl ...
- Failed to create the Java Virtual Machine.问题的解决
运行Eclipse,出现了"Failed to create the Java Virtual Machine."错误: 解决的办法是在Eclipse的解压目录下找到eclipse ...
随机推荐
- Java学习笔记25(System类)
System类,系统类,包含的是静态方法,无法创建对象 这里介绍几个简单的方法,其他一些在后边用到的时候会讲 类方法: currentTimeMillis():获取当前毫秒数 package demo ...
- Flask知识点一
1 flask安装 pip3 install falsk 一Werkzeug Werkzeug是什么? Werkzeug就是Python对WSGI的实现的一个通用库,它是Flask所使用的底层WSGI ...
- JAVA中的按值传递
Java中只有按值传递,没有按引用传递! 方法参数共有两种类型: 基本数据类型 对象引用 一:基本数据类型 首先看一个小例子: package chuandi; public class Test1 ...
- MySQL innodb_table_monitor 解析
背景: 用innodb_table_monitor来查看表内部的存储信息和索引结构是一个好的办法.再之前的MySQL 字符串主键和整型主键分析中提到了一些内容,但没有细讲,现在来好好的分析 ...
- SQL 语句优化方法
尽量避免非操作符的使用,在索引上使用 NOT,<> 等操作符,数据库管理系统是不会使用索引的,可以将查询语句转化为可以使用索引的查询. 避免对查询的列的操作,任何对列的操作都可能导致全表扫 ...
- C#并发编程实例讲解-概述(01)
在工作中经常遇到需要并发编程的实例,一直没有时间来整理,现在空了下来,个人整理对并发一下理解. 关于并发编程的几个误解 误解一:并发编程就是多线程 实际上多线只是并发编程的一中形式,在C#中还有很多更 ...
- linux连接mysql 出现Access denied for user 'root'@'localhost'(using password: YES)错误解决方案
linux连接mysql /usr/local/mysql/bin/mysql -uroot -p 输入密码出现Access denied for user 'root'@'localhost'(us ...
- cf_514C(字符串哈希)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=121897#problem/G Watto and Mechanism Time ...
- Python系列之入门篇——HDFS
Python系列之入门篇--HDFS 简介 HDFS (Hadoop Distributed File System) Hadoop分布式文件系统,具有高容错性,适合部署在廉价的机器上.Python ...
- [国嵌攻略][070-095][Linux编程函数手册]
第1类 时间编程类 1.1 获取日历时间 1.1.1 函数名 time 1.1.2 函数原形 time_t time(time_t *t) 1.1.3 函数功能 返回日历时间 1.1.4 所属头文件 ...