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
  • 多线程
  • 弱引用

 

相关文章
|
19天前
|
存储 安全 Java
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别;什么是程序计数器,堆,虚拟机栈,栈内存溢出,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
|
1天前
|
Java Docker 索引
记录一次索引未建立、继而引发一系列的问题、包含索引创建失败、虚拟机中JVM虚拟机内存满的情况
这篇文章记录了作者在分布式微服务项目中遇到的一系列问题,起因是商品服务检索接口测试失败,原因是Elasticsearch索引未找到。文章详细描述了解决过程中遇到的几个关键问题:分词器的安装、Elasticsearch内存溢出的处理,以及最终成功创建`gulimall_product`索引的步骤。作者还分享了使用Postman测试接口的经历,并强调了问题解决过程中遇到的挑战和所花费的时间。
|
6天前
|
存储 算法 前端开发
JVM架构与主要组件:了解Java程序的运行环境
JVM的架构设计非常精妙,它确保了Java程序的跨平台性和高效执行。通过了解JVM的各个组件,我们可以更好地理解Java程序的运行机制,这对于编写高效且稳定的Java应用程序至关重要。
21 3
|
15天前
|
Java 编译器 测试技术
Java零基础教学(03):如何正确区别JDK、JRE和JVM??
【8月更文挑战第3天】Java零基础教学篇,手把手实践教学!
39 2
|
16天前
|
人工智能 Java 编译器
Java零基础(3) - 区别JDK、JRE和JVM
【8月更文挑战第3天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
37 1
|
12天前
|
监控 算法 Java
深入理解Java虚拟机:JVM调优与性能提升
本文旨在为Java开发者提供一条清晰的路径,以深入掌握Java虚拟机(JVM)的内部机制和性能调优技巧。通过具体案例分析,我们将探讨如何识别性能瓶颈、选择合适的工具进行监控与调试,以及实施有效的优化策略,最终达到提高应用程序性能的目的。文章不仅关注理论,更注重实践应用,帮助读者在面对复杂的Java应用时能够游刃有余。
35 0
|
20天前
|
存储 Java 对象存储
Java虚拟机(JVM)中的栈(Stack)和堆(Heap)
在Java虚拟机(JVM)中,栈(Stack)和堆(Heap)是存储数据的两个关键区域。它们在内存管理中扮演着非常重要的角色,但各自的用途和特点有所不同。
31 0
|
7天前
|
存储 算法 Java
JVM自动内存管理之垃圾收集算法
文章概述了JVM内存管理和垃圾收集的基本概念,提供一个关于JVM内存管理和垃圾收集的基础理解框架。
JVM自动内存管理之垃圾收集算法
|
7天前
|
存储 Java 程序员
JVM自动内存管理之运行时内存区
这篇文章详细解释了JVM运行时数据区的各个组成部分及其作用,有助于理解Java程序运行时的内存布局和管理机制。
JVM自动内存管理之运行时内存区
|
6天前
|
存储 安全 Java
JVM内存结构
这篇文章详细介绍了Java虚拟机(JVM)的内存结构,包括类的加载过程、类加载器的双亲委派机制、沙箱安全机制、程序计数器、Java栈、Java堆、本地方法和本地方法栈等关键组件及其作用。
JVM内存结构