本篇仅仅是JVM的简介,关于更多的JVM细节,请参见本专题JVM

计算机系统当中的JVM

  • JVM是运行在操作系统之上的,并没有和硬件有直接的交互
  • Java代码一次编译,到处运行

HotSpot虚拟机结构概览

  • 方法区和堆区是所有线程共享的内存区域;
  • 而java栈、本地方法栈和程序计数器是运行是线程私有的内存区域。
  • Java栈又叫做jvm虚拟机栈。
  • 方法区(永久代)在jdk8中又叫做元空间Metaspace

    • 方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器(JIT编译器,英文写作Just-In-Time Compiler)编译后的代码等数据。
    • 虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做 Non-Heap(非堆),目的应该是与 Java 堆区分开来。
  • java代码大致执行流程:java源程序--编译javac-->字节码文件.class-->类装载子系统生成反射类(存入方法区)--->运行时数据区(五大块儿)--->执行引擎-->解释执行+编译执行(JIT)-->操作系统(Win,Linux,Mac JVM)

栈的指令集架构和寄存器的指令集架构

由于跨平台的设计,java的指令都是根据栈来设计的,不同平台CPU架构不同,所以不能设计为基于寄存器的

二者区别:

栈:跨平台性、指令集小、指令多;执行性比寄存器差
寄存器:指令少

一些简单查看命令:

//查看指令集命令代码
cd out/production/类根目录 //反编译
javap -v StackStruTest.class //打印程序执行的进程
jps

Hotspot中方法区的变动:

关于方法区的结构,在过去的版本jdk1.6/1.7/1.8当中均有变动,故在此提前声明:

  • jdk1.6及之前:有永久代(permanent generation) ,静态变量、字符串常量池存放在 永久代上。
  • jdk1.7:有永久代,但已经逐步“去永久代”,字符串常量池、静态变量移除,保存在堆中。注意:
  • jdk1.8及之后: 无永久代,类型信息、字段、方法、常量保存在本地内存的元空间,但字符串常量池、静态变量仍留在堆空间.

注意:

jdk1.8及之后: 无永久代,类型信息、字段、方法、常量保存在本地内存的元空间。

但字符串常量池、静态变量仍留在堆空间。

除此之外,元空间(或称方法区),不再使用虚拟机内存,而是使用本地内存。

参见:  关于类加载子系统详述

参见:   关于程序计数器详述

参见   关于Java虚拟机栈的详述

参见:  关于本地方法接口详述

参见:  关于本地方法栈详述

参见:  关于方法区的详述

参见:   关于堆区的详述

参见:  关于执行引擎的详述

关于更多JVM细节,请参见本专题JVM

jvm生命周期

1.启动

通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的.

2.执行

  • 一个运行中的java虚拟机有着一个清晰的任务:执行Java程序;
  • 程序开始执行的时候他才运行,程序结束时他就停止;
  • 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。

3.退出

  • 程序正常执行结束
  • 程序异常或错误而异常终止
  • 操作系统错误导致终止
  • 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且java安全管理器也允许这次exit或halt操作
  • 除此之外,JNI规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况

补充:古今JVM

  • SUN Classic
  • Exact VM
  • HotSpot VM :HotSpot指热点代码探测技术
  • BEA JRockit:(BEA 已被Oracle收购) 专注于服务端应用,世界最快的jvm之一
  • IBM J9
  • Taobao JVM: 目前已经在淘宝、天猫上线,替换了Oracle官方JVM;
  • Graal VM: Oracle 2018年4月公开,口号 Run Programs Faster Anywhere.最可能替代HotSpot的产品

Android虚拟机 DVM

  • 谷歌开发,基于Android,在2.2中提供了JIT
  • 只能称作虚拟机 不能称为java虚拟机,他没有遵循Java虚拟机规范
  • 基于寄存器架构,效率高,但是跟硬件耦合度比较高
  • 不能直接执行class文件,执行的是dex文件
  • 5.0使用支持提前编译的ART VM替换Dalvik VM

JVM_01 简介的更多相关文章

  1. JVM-垃圾回收篇

    目录 JVM-垃圾回收篇 前言 举个例子 JVM 有哪些垃圾回收算法? 标记-清除算法 复制算法 标记-整理算法 分代收集算法 JVM 有哪些垃圾回收器? 概述 几个相关概念 一:Serial 收集器 ...

  2. JVM-概述和内存区域

    目录 JVM的优势 Java的跨平台性 JVM跨语言 举个例子 JVM整体结构 运行时数据区 方法区(Method Area) 1. 什么是方法区(Method Area)? 2.方法区(Method ...

  3. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  4. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  5. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  6. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  7. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  8. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  9. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

随机推荐

  1. Educational Codeforces Round 93 (Rated for Div. 2)题解

    A. Bad Triangle 题目:https://codeforces.com/contest/1398/problem/A 题解:一道计算几何题,只要观察数组的第1,2,n个,判断他们能否构成三 ...

  2. IDEA使用教程(上)

     一.介绍 IDEA全称IntelliJ IDEA,是java语言开发的集成环境.idea提倡的是智能编码,目的是减少程序员的工作,其特色功能有智能的选取.丰富的导航模式.历史记录功能等,最突出的功能 ...

  3. Docker日常使用方式

    前提 在安装docker之前,建议你设置系统的国内镜像源先哦,很快~嗯,快. 阿里云镜像源:https://developer.aliyun.com/mirror/ 安装 安装docker 下面都是官 ...

  4. java自动拆装箱

    介绍 Java 5增加了自动装箱与自动拆箱机制,方便基本类型与包装类型的相互转换操作.(关于基本类型与包装类型之前有记录过https://www.cnblogs.com/xiuzhublog/p/12 ...

  5. SparkSQL DSL 随便写写

    @Testdef functionTest() = { Logger.getLogger("org").setLevel(Level.WARN) val spark = getSp ...

  6. Linux环境安装Docker入门教程

    安装 下载 wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.1-ce.tgz 解压 tar -xvf ...

  7. nova卸载volume源码分析

    基于llvm +iscsi协议进行分析 1.客戶端接受请求并路由到 VolumeAttachmentController 其对应的restfull请求格式如下:delete /servers/{ser ...

  8. 京东T8通过企业实例展示软件架构实际应用,带你迅速成为架构师

    在软件行业,架构师和软件工程师是非常辛苦的职业.一方面新技术层出不穷;另一方面业务需求也层出不穷,让人疲于应付.导致的后果就是常常加班,生活质量低下.只有曾经身在其中的人,才能够体会其中的酸甜苦辣. ...

  9. Google Analytics谷歌分析事件之非互动事件

    非互动事件官方的解释如下 “非互动”一词是指可选的布尔值参数,此参数可以传递到用于发送事件命中的方法.通过此参数,您可以确定要如何为网站上包含事件衡量的网页定义跳出率.例如,假设您的首页上内嵌有一个视 ...

  10. 前端通过jqplot绘制折线图

    首先需要下载jqplot需要的js与css文件,我已近打包好了,需要的可以下载 接下来导入其中关键的js与css如下, <link href="css/jquery.jqplot.mi ...