Java平台和语言最开始只是SUN公司在1990年12月开始研究的一个内部项目:

Java的平台无关性

Java平台和语言最开始只是SUN公司在1990年12月开始研究的一个内部项目[stealth 秘密行动],主要研究:交互式电视、烤面包箱等微型系统.Sun内部人员把这个项目称为Green JamesGosling[詹姆斯·高斯林]

消费类电子产品要求可靠性高、费用低、标准化、使用简单,用户并不关心CPU的型号,也不欣赏专用昂贵的RISC处理器,他们需要这些产品是建立在一个标准的基础之上,有一系列可选的方案。为了使整个系统与平台无关,Gosling首先从改写C编译器着手。但是Gosling在改写过程中感到仅C是无法满足需要的,于是在1991年6月份开始准备开发一个新的语言。

Gosling在设计中采用了虚机器码(VirtualMachineCode)方式,即Java语言编译后产生的是虚拟机码,虚拟机码运行在一个解释器上,每一个操作系统均有一个解释器。这样一来,Java就成了平台无关语言。

JVM简介

Jvm英文全称:Java Virtual Machine(Java虚拟机)。

虚拟机:通过软件来模拟出来的具有完整的硬件系统功能的、运行在完全隔离的环境中的完整的计算机系统。例如:在人工的草原养殖场模拟真实的草原环境,你们家里的小池塘模拟真实的海洋环境。jvm世界观:java对象在jvm里的生老病死。Jvm一样也是通过在实际的计算机中软件虚构出来的,用来模拟一套完整的运行平台。Java的一次编写处处运行:是指在一段代码可以在不同的平台运行,这就归功于jvm。作为java编译器和os之间的虚拟解释器,jvm根据不同的os,将java编译后的目标代码(字节码)解释成不同os可以运行的机器指令,所以说:有了jvm之后呢,java语言在不同平台上运行时不需要重新编译。一次编写,处处运行!

JVM发展史

从1996年初Sun公司发布的JDK 1.0中所包含的Sun Classic VM至今有很多jvm;

本次详细介绍下跟我们有关的虚拟机

  1. Sun Classic
  2. Exact VM
  3. Sun HotSpot VM

其余的比如:

  1. Sun Mobile-Embedded VM / Meta-Circular VM

  2. BEA JRockit / IBM J9 VM

  3. Azul VM / BEA Liquid VM

JVM发展史-Exact VM

JDK 1.2时,曾在Solaris平台上发布过一款名为Exact VM的虚拟机,它的执行系统已经具备现代高性能虚拟机的雏形:如支持编译器与解释器混合工作模式。

Exact VM因它使用准确式内存管理(Exact Memory Management,也可以叫Non-Conservative/Accurate Memory Management)而得名。

虚拟机可以知道内存中某个位置的数据具体是什么类型。譬如内存中有一个32位的整数123456,它到底是一个reference类型指向123456的内存地址还是一个数值为123456的整数,虚拟机将有能力分辨出来,这样才能在GC(垃圾收集)的时候准确判断堆上的数据是否还可能被使用。

由于使用了准确式内存管理,Exact VM可以抛弃以前Classic VM基于handle的对象查找方式每次定位对象都少了一次间接查找的开销,提升执行性能。

基于handle(句柄)的对象查找:当123456指向的对象经过一次垃圾回收后,内存地址需要重新规整。内存地址发生了变化为654321,不能将内存中所有的值为123456数据都改为654321。使用句柄来管理对象内存地址的变动,所以定位对象时先去句柄查下实际的地址再去查找对象本身的属性。类似于对象的户口变更登记册。

句柄可以理解为:引用的引用。指针的指针。

发展史- SC/EV

Sun Classic / Exact VM的生命周期

虽然Exact VM的技术相对Classic VM来说先进了许多,但是在商业应用上只存在了很短暂的时间就被更为优秀的HotSpot VM所取代,甚至还没有来得及发布Windows和Linux平台下的商用版本。

而Classic VM的生命周期则相对长了许多,它在JDK 1.2之前是Sun JDK中唯一的虚拟机,在JDK 1.2时,它与HotSpot VM并存,但默认使用的是Classic VM(用户可用java -hotspot参数切换至HotSpot VM),而在JDK 1.3时,HotSpot VM成为默认虚拟机,但Classic VM仍作为虚拟机的“备用选择”发布(使用java -classic参数切换),直到JDK 1.4的时候,Classic VM才完全退出商用虚拟机的历史舞台

JVM发展史-热点代码探测技术

HotSpot VM的热点代码探测技术

  1. 可以通过执行计数器找出最具有编译价值的代码,根据执行计数器判断是否达到阈值,没到就解释执行,否则提交编译请求,通知JIT编译器以方法为单位进行编译。

所以:如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。OSR:由于代码块可能是在代码块在解释执行过程中直接切换到本地代码执行,所以也叫做栈上替换(OSROnStackReplacement)

  1. 通过编译器与解释器恰当地协同工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,即时编译的时间压力也相对减小,这样有助于引入更多的代码优化技术,输出质量更高的本地代码[机器执行码]。

Java虚拟机------JVM介绍的更多相关文章

  1. Java虚拟机JVM学习07 类的卸载机制

    Java虚拟机JVM学习07 类的卸载机制 类的生命周期 当Sample类被加载.连接和初始化后,它的生命周期就开始了. 当代表Sample类的Class对象不再被引用,即不可触及时,Class对象就 ...

  2. 深入解析java虚拟机-jvm运行机制

    转自oschina 一:JVM基础概念 JVM(Java虚拟机)一种用于计算设备的规范,可用不同的方式(软件或硬件)加以实现.编译虚拟机的指令集与编译微处理器的指令集非常类似.Java虚拟机包括一套字 ...

  3. java虚拟机 jvm 出入java栈 栈空间内存分配

    java栈空间是一块线程私有的内存空间,java堆和程序数据密切相关,那么java栈就是和线程执行密切相关.线程最基本的执行行为就是函数的调用.每次函数调用其实是通过java栈传递数据的. 数据结构中 ...

  4. Java虚拟机(JVM)知多少

    本文大量参考:https://www.cnblogs.com/lfs2640666960/p/9297176.html 概述 JVM是JRE的一部分.它是一个虚构出来的计算机,是通过在实际的计算机上仿 ...

  5. 深入理解java虚拟机JVM(下)

    深入理解java虚拟机JVM(下) 链接:https://pan.baidu.com/s/1c6pZjLeMQqc9t-OXvUM66w 提取码:uwak 复制这段内容后打开百度网盘手机App,操作更 ...

  6. 深入理解java虚拟机JVM(上)

    深入理解java虚拟机JVM(上) 链接:https://pan.baidu.com/s/1c6pZjLeMQqc9t-OXvUM66w 提取码:uwak 复制这段内容后打开百度网盘手机App,操作更 ...

  7. java虚拟机jvm启动后java代码层面发生了什么?

    java虚拟机jvm启动后java代码层面发生了什么? 0000 我想验证的事情 java代码在被编译后可以被jdk提供的java命令进行加载和运行, 在我们的程序被运行起来的时候,都发生了什么事情, ...

  8. Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论

    Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...

  9. Java虚拟机JVM学习05 类加载器的父委托机制

    Java虚拟机JVM学习05 类加载器的父委托机制 类加载器 类加载器用来把类加载到Java虚拟机中. 类加载器的类型 有两种类型的类加载器: 1.JVM自带的加载器: 根类加载器(Bootstrap ...

随机推荐

  1. Nginx的使用(二)Nginx配置wordpress

    安装php:https://windows.php.net/download/,php默认启动命令:php-cgi.exe -b 127.0.0.1:9000 安装wordpress:https:// ...

  2. 201621123075 week5 继承、多态、抽象类和接口

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 接口.abstract.implements.comparable 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一 ...

  3. cocos2d-x js 中创建node的方法

    1.精灵Sprite 一共4种创建方式 (1) 根据图片资源路径创建 1 2 3 4 //参数1:图片资源路径 var sprite1 = cc.Sprite.create("res/zif ...

  4. cocos2d-x学习笔记(贪吃蛇代码)

    方向键控制蛇运动:上↑:右→:下↓:左←. 百度网盘链接:https://pan.baidu.com/s/1c1FSXaw 提取密码:u1kr

  5. 开机出错提示 cpu fan speed error detected

    问题:开机跳 cpu fan speed error detected 分析:提示是cpu fan speed 有问题进入 BIOS 设置了好几次仍不行 解决方法: 进入BIOS,BOOT选项卡,将 ...

  6. SharePoint REST API - 一个请求批量操作

    博客地址:http://blog.csdn.net/FoxDave 本篇主要讲解如何应用$batch查询选项来批量执行REST/OData请求,它将多个操作捆绑到一个请求中,可以改进应用程序的性能 ...

  7. mysql varchar存储最大

    utf-8的汉字 3个字节,varchar()括号中的数字是可存储的最大字符数,但是总和不超过65535个字节,这是行的size限制的,除以3差不多21800多,算上其他列等信息,如果用最大的话设置2 ...

  8. ceph压力测试结果总结

    万兆网速的ceph分布式存储单虚拟机下的带宽和iops测试结果: 带宽: 写:700-850MB 读:800-900MB iops: 写:15000-20000 读:45000-55000

  9. linq的基本使用

    1.查询所有的偶数 , , , , , , , , , , , , }; var elist = from s in str == select s; foreach (int i in elist) ...

  10. Xcode 和 VisualC++输出流的差别的理解

    将这样一段程序分别运行与Visual Studio 和 Xcode上边的结果: #include <iostream> using namespace std; int main() { ...