主要内容如下:

  • JVM的概念
  • JVM发展历史
  • JVM种类
  • Java语言规范
  • JVM规范

一、JVM的概念:

JVM:

  Java Virtual Machine,意为Java虚拟机。

虚拟机:

  指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统

有哪些虚拟机:

VMWare、Virtual Box:都是使用软件模拟物理CPU的指令集

JVM:使用软件模拟Java 字节码的指令集

二、JVM发展历史:

1、Java发展史:

  • 1996年:SUN JDK 1.0 Classic VM

    纯解释运行,使用外挂进行JIT

  • 1997年:JDK1.1 发布

    AWT、内部类、JDBC、RMI、反射

  • 1998年:JDK1.2 Solaris Exact VM

    JIT 解释器混合

    Accurate Memory Management 精确内存管理,数据类型敏感

    提升了GC性能

    注:JDK1.2开始,称为Java 2,于是有了J2SE J2EE J2ME 的出现,同时加入Swing Collections。

  • 2000年:JDK 1.3,Hotspot 作为默认虚拟机发布

    加入JavaSound

  • 2002年:JDK 1.4【Java真正走向成熟的一个版本】,Classic VM退出历史舞台

    加入:Assert  正则表达式  NIO  IPV6  日志API  加密类库

  • 2004年:JDK 1.5【至关重要的版本】。即 JDK5 、J2SE 5 、Java 5

泛型

注解

枚举

自动装箱

可变长参数

Foreach循环

  • 2006年:JDK 1.6发布,JDK6

脚本语言支持

JDBC 4.0

Java编译器 API

  • 2011年:JDK7发布

延误项目推出到JDK8

G1(全新的GC收集器)

动态语言增强

64位系统中的压缩指针

NIO 2.0

  • 2014年:JDK8发布【重要的版本】

Lambda表达式

语法增强  Java类型注解

  • 2016年:计划发布JDK9

    模块化

2、重大历史事件:

  • 使用最为广泛的JVM为HotSpot

    HotSpot 为Longview Technologies开发,被SUN收购

  • 2006年:Java开源,并建立OpenJDK

    HotSpot  成为Sun JDK和OpenJDK中所带的虚拟机

  • 2008年:Oracle收购BEA

    得到JRockit VM

  • 2009年4月20日:Oracle公司正式宣布以74亿美金的价格收购Sun公司

得到Hotspot

  • Oracle宣布在JDK8时整合JRockit和Hotspot,将这两款优秀的虚拟机取长补短,最终合二为一。

    在Hotspot基础上,移植JRockit优秀特性

三、JVM种类:

1、KVM:

SUN发布

IOS Android兴起之前,广泛用于手机系统

2、CDC/CLDC HotSpot:

手机、电子书、PDA等设备上建立统一的Java编程接口

J2ME的重要组成部分

3、JRockit:

  BEA

4、IBM J9 VM:

  IBM内部

5、Apache Harmony:

兼容于JDK 1.5和JDK 1.6的Java程序运行平台

与Oracle关系恶劣,退出JCP ,Java社区的分裂

OpenJDK出现后,受到挑战,2011年退役

没有大规模商用经历

对Android的发展有积极作用

四、Java语言规范:

Java语言规范主要体现在以下几点:

  • 语法
  • 变量
  • 类型
  • 文法

五、JVM规范:

JVM主要定义二进制class文件和JVM指令集等。

JVM语言规范主要体现在以下几点:

  • Class文件类型
  • 运行时数据
  • 帧栈
  • 虚拟机的启动
  • 虚拟机的指令集

此外,JVM需要对Java Library 提供以下支持:(因为这些东西没有办法通过java语言本身来实现)

  • 反射 java.lang.reflect
  • ClassLoader
  • 初始化class和interface
  • 安全相关 java.security
  • 多线程
  • 弱引用

Java虚拟机详解01----初识JVM的更多相关文章

  1. Java虚拟机详解03----常用JVM配置参数

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  2. Java虚拟机详解----JVM常见问题总结

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. Java虚拟机详解----JVM内存结构

    http://www.cnblogs.com/smyhvae/p/4748392.htm 主要内容如下: JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程: JVM启 ...

  4. Java虚拟机详解(五)------JVM参数(持续更新)

    JVM参数有很多,其实我们直接使用默认的JVM参数,不去修改都可以满足大多数情况.但是如果你想在有限的硬件资源下,部署的系统达到最大的运行效率,那么进行相关的JVM参数设置是必不可少的.下面我们就来对 ...

  5. [转]JVM内幕:Java虚拟机详解

    本文由 ImportNew - 挖坑的张师傅 翻译自 jamesdbloom.欢迎加入翻译小组.转载请见文末要求. 这篇文章解释了Java 虚拟机(JVM)的内部架构.下图显示了遵守Java SE 7 ...

  6. JVM内幕:Java虚拟机详解

    这篇文章解释了Java 虚拟机(JVM)的内部架构.下图显示了遵守 Java SE 7 规范的典型的 JVM 核心内部组件. 上图显示的组件分两个章节解释.第一章讨论针对每个线程创建的组件,第二章节讨 ...

  7. JVM之Java虚拟机详解

    这篇文章解释了Java 虚拟机(JVM)的内部架构.下图显示了遵守Java SE 7 规范的典型的 JVM 核心内部组件. 上图显示的组件分两个章节解释.第一章讨论针对每个线程创建的组件,第二章节讨论 ...

  8. Java虚拟机详解----常用JVM配置参数

    本文主要内容: Trace跟踪参数 堆的分配参数 栈的分配参数 零.在IDE的后台打印GC日志: 既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技能,它只是一些人为确定的规则,没有太多 ...

  9. 【转】Java虚拟机详解----常用JVM配置参数

    原文地址:http://www.cnblogs.com/smyhvae/p/4736162.html 本文主要内容: Trace跟踪参数 堆的分配参数 栈的分配参数 零.在IDE的后台打印GC日志: ...

随机推荐

  1. 股票价格涨跌预测—基于KNN分类器

    code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...

  2. .NET Framework 4.0之Tuple(元组)

    Tuple,是函数式编程的概念之一,早见于Elang.F#等动态语言.Tuple类型像一个口袋,在出门前可以把所需的任何东西一股脑地放在里面.您可以将钥匙.驾驶证.便笺簿和钢笔放在口袋里,您的口袋是存 ...

  3. 备份一张iPhone拍照写入exif中的orientation图片

  4. CSS选择器性能分析

    写了几篇关于js的博客,也是关于性能的,现在,我觉得有必要那css来认真分析一下了.之前只是看别人这么写就跟着写,但是没有去研究这样写或者是不是正确的写法,性价比怎么样,渲染的效率好么!这些都没有考虑 ...

  5. javascript作用域链学习笔记

    作用域链 "JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里." --权威指南 在JavaScript中,一切皆对象,包括函数.函数对象和其它对象 ...

  6. VS2010中重命名项目

    通常,在项目开发初始,一般都是先做一个Demo,以方便进行修改设计.演示等,这可能导致项目命名并不符合最后的规范,则需要修改项目名称.VS没有推出这方面针对性的功能,网友们也纷纷自己写了软件. 方案一 ...

  7. 高性能JS笔记1——加载执行

    一.脚本位置 1.Script标签尽可能放到Body底部,以减少脚本文件下载对整个页面UI渲染的影响. 2.Script标签永远不要紧跟Link标签后面. 二.组织脚本 1.合并多个文件在一个Scri ...

  8. 【读书笔记】iOS-开发技巧-三种收起键盘的方法

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  9. Cent OS 6.4安装mysql

    Cent OS6.4 RPM安装mysql 一.卸载掉原有mysql 因为目前主流Linux系统版本基本上都集成了mysql数据库在里面 如下命令来查看我们的操作系统上是否已经安装了mysql数据库 ...

  10. IOS 瀑布流UICollectionView实现

    IOS 瀑布流UICollectionView实现 在实现瀑布流之前先来看看瀑布流的雏形(此方法的雏形 UICollectionView) 对于UICollectionView我们有几点注意事项 它和 ...