Java虚拟机详解01----初识JVM
主要内容如下:
- 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的更多相关文章
- Java虚拟机详解03----常用JVM配置参数
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Java虚拟机详解----JVM常见问题总结
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Java虚拟机详解----JVM内存结构
http://www.cnblogs.com/smyhvae/p/4748392.htm 主要内容如下: JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程: JVM启 ...
- Java虚拟机详解(五)------JVM参数(持续更新)
JVM参数有很多,其实我们直接使用默认的JVM参数,不去修改都可以满足大多数情况.但是如果你想在有限的硬件资源下,部署的系统达到最大的运行效率,那么进行相关的JVM参数设置是必不可少的.下面我们就来对 ...
- [转]JVM内幕:Java虚拟机详解
本文由 ImportNew - 挖坑的张师傅 翻译自 jamesdbloom.欢迎加入翻译小组.转载请见文末要求. 这篇文章解释了Java 虚拟机(JVM)的内部架构.下图显示了遵守Java SE 7 ...
- JVM内幕:Java虚拟机详解
这篇文章解释了Java 虚拟机(JVM)的内部架构.下图显示了遵守 Java SE 7 规范的典型的 JVM 核心内部组件. 上图显示的组件分两个章节解释.第一章讨论针对每个线程创建的组件,第二章节讨 ...
- JVM之Java虚拟机详解
这篇文章解释了Java 虚拟机(JVM)的内部架构.下图显示了遵守Java SE 7 规范的典型的 JVM 核心内部组件. 上图显示的组件分两个章节解释.第一章讨论针对每个线程创建的组件,第二章节讨论 ...
- Java虚拟机详解----常用JVM配置参数
本文主要内容: Trace跟踪参数 堆的分配参数 栈的分配参数 零.在IDE的后台打印GC日志: 既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技能,它只是一些人为确定的规则,没有太多 ...
- 【转】Java虚拟机详解----常用JVM配置参数
原文地址:http://www.cnblogs.com/smyhvae/p/4736162.html 本文主要内容: Trace跟踪参数 堆的分配参数 栈的分配参数 零.在IDE的后台打印GC日志: ...
随机推荐
- Mysql基本数据操作
一.mysql中的逻辑对象 mysqld(process_id(threads)+memory+datadir)-->库-->表-->记录(由行与列组成) 什么是关系型数据库:表与表 ...
- 在Hadoop平台跑python脚本
1.开发IDE,我使用的是PyCharm. 2.运行原理 使用python写MapReduce的“诀窍”是利用Hadoop流的API,通过STDIN(标准输入).STDOUT(标准输出)在 ...
- 总结一下SQL的全局变量
SQL Server 2008中的全局变量及其用法 T-SQL程序中的变量分为全局变量和局部变量两类,全局变量是由SQL Server系统定义和使用的变量.DBA和用户可以使用全局变量的值,但不能自己 ...
- windows下mongodb安装与使用
首先安装mongodb 1.下载地址:http://www.mongodb.org/downloads 2.解压缩到自己想要安装的目录,比如d:\mongodb 3.创建文件夹d:\mongodb\d ...
- 关于HTML的编码问题
平时我在写html文件时,很容易忘掉这个文件的编码类型,<meta charset=”utf-8”> 的语句,因为编辑器默认设置了一个编码,所以在我没有写编码格式设置语句的情况下,效果依然 ...
- 2014年听写VOA50篇
在沪江英语的VOA听写栏目上听写完成50篇,听写笔记PDF. 103.VOASP.2014奥巴马国情咨文(1-3).mp3 104.VOASP.2014奥巴马国情咨文(2-3).mp3 105.VOA ...
- UIView与CALayer的区别
1.UIView相比CALayer最大区别是UIView可以响应用户事件,而CALayer不可以.UIView侧重于对显示内容的管理,CALayer侧重于对内容的绘制. 2.UIView和CALaye ...
- IOS项目集成ShareSDK实现第三方登录、分享、关注等功能。
(1)官方下载ShareSDK iOS 2.8.8,地址:http://sharesdk.cn/ (2)根据实际情况,引入相关的库,参考官方文档. (3)在项目的AppDelegate中一般情况下有三 ...
- 怎么向Xcode6 IOS8之后向项目中添加预编译文件
苹果的XCode在6版本之后新建项目时取消了自动创建预编译头文件pch,该文件里存放的工程中一些不常被修改的代码,比如常用的框架头文件,这样做的目的提高编译器编译速度.我们可以往里面加入一些项目中都要 ...
- SQL - 生成指定范围内的随机数
今天按照公司需求,需要做一个sql作业来对数据库定时触发,其中有个难点,就是在sql中需要在1-n中随机出来一个结果. google了半天,找到一个比较好的方式. 写下这个sql: DECLARE @ ...