JVM笔记

JVM传言

Java不是最强大的语言,但是JVM是最强大的虚拟机

虚拟机分类

  1. 系统虚拟机

    类似VMware,就属于系统虚拟机,它提供了一个可运行完整操作系统的平台

  2. 程序虚拟机

    Java虚拟机,它专门为执行单个计算程序而设计,在JVM中执行的指令称为Java字节码指令

JVM作用

Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器执行执行。

JVM的特点

  1. write ones,run Anywhere!
  2. 自动内存管理
  3. 自动垃圾回收功能

JVM的位置

JVM整体的结构(HotSpot虚拟机)

JAVA程序的执行流程

JIT编译器

主要负责将热点代码(即重复运行的代码,把它直接编译为机器指令)

JVM的架构模型

Java编译器输入的指令流基本上上是一种基于的指令集架构。另外一种指令集架构则是基于寄存器的指令集架构。

两种架构的区别:

  1. 基于栈的架构

    • 设计实现简单,适用于资源受限的系统
    • 避开了寄存器分配的难题:使用零地址指令方式分配
    • 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈,指令集更小,编译器容易实现。
    • 栈是内存的一部分,不需要其他硬件的支持,可移植性好,跨平台性好

栈和寄存器

  • 内存是CPU和硬盘之间的通道
  • 内存如同一个仓库,堆,栈是仓库中开辟的一个规则有序的仓库区,而寄存器就是生产线上的一个容器
  • 堆,栈是属于内存区的一部分,堆,栈是内存中的一种数据结构
  • 而寄存器则是CPU中的一部分。寄存器是CPU的存储器.速度快

JVM的生命周期

  1. 启动

    Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始的类(initial class)来完成的。

  2. 虚拟机的执行

    1. 一个运行中的Java虚拟机有一个清晰的任务:执行Java程序
    2. 程序开始JVM开始运行,程序结束,JVM也随之结束
    3. 执行一个所谓的Java程序的时候,真真正正执行的是一个Java虚拟机的进程
  3. 退出

    1. 程序正常退出
    2. 程序在执行过程中遇到异常或错误
    3. 操作系统错误,导致java虚拟机进程终止
    4. 某线程调用System.exit()方法退出

JVM发展历程

java1.0 -> Sun Classic VM

1.1996年java1.0版本,sun公司发布了Sun Classic VM这个虚拟机,它是世界上第一款商用的Java虚拟机,jdk1.4被淘汰。

2.这款虚拟机的内部只提供解释器

3.可以外挂JIT编译器,但是解释器和编译器无法同时工作

4.现在的Hotspot内置了Sun Classic VM虚拟机

​ 解释器和编译器:

​ 1.解释器:逐行解释字节码为机器指令,逐行执行

​ 2.编译器:遇到重复性执行的代码,编译器可将其直接编译为机器指令,并缓存起来,用来重复使用

java1.2 -> Sun Exact VM

1.虚拟机可以知道内存中某个位置的数据具体是什么类型

2.编译器和解释器混合工作模式

3.只在solaris平台被短暂使用,后被hotspot虚拟机替换

java1.3 -> HotSpot VM

1.此虚拟机最初由Longview Technologiew公司设计,1997年被sun收购,2009年sun被orical收购。

2.jdk1.3时,HotSpot称为默认的虚拟机

3.名称中的HotSpot指的就是它的热点代码探测技术,通过计数器找到最具有编译价值的代码,触发即时编译或者栈上替换

4.通过编译器和解释器协同工作,更高效的运行代码

5.每个端都适用

(Oracle)BEA JRockit

1.专注于服务器端的应用,因此JRockit内部不包含解释器的实现,全部代码都考即时编译器编译后执行。

2.大量行业基准测试显示,JRockit JVM是世界上最快的JVM。

3.优势:面向演示敏感型应用的解决方案JRockit Real Time,适合财务,军事

4.MissionControl服务套件,它是一组以极低的开销来监控,管理,和分析生产环境中的应用程序的工具

5.Orcale收购了BEA,整合了两大优秀虚拟机有点,大致在JDK8中完成,整合的方式是在HotSpot的基础上,一直JRockit的优秀特性。

IBM J9

1.全称:IBM Technology for Java Virtual Machine 简称IT4J,内部代号J9

2.市场定位与HotSpot接近,服务端、桌面应用,嵌入式等多用途

3.广泛用于IBM的各种JAVA产品

4.目前,有影响力的三大商用虚拟机之一,也号称是世界上最快的Java虚拟机

5.2017年左右,IBM发布了开源J9 VM,命名为OpenJ9,交给Eclipse基金会管理,也称为Eclipse OpenJ9

KVM和CDC/DLDC HotSpot

1.Orcale在 Java ME产品线上的两款虚拟机

2.市场定位比较尴尬,智能收集被ios和Android二分天下

Azul VM and BEA Liquid VM

1.前面三大虚拟机,使用在通用的硬件平台上

2.Azul VM 和BEA Liquid VM是与特定的硬件平台绑定,软硬件配合使用的,配合起来特别猛

TaobaoJVM

1.由AliJVM 团队发布。 介于openJDK 开发了自己的定制版本AlibabaJDK,简称AJDK

2.是国内发布的第一个优化,深度定制且开源的高性能服务器版Java虚拟机。

3.创新的GCIH(gc invisble heab)技术实现了off-heap,即将生命周期较长的Java对象从heap中移到heap外,并且GC不能管理GCIH内部的Java对象,以此达到降低GC的回收频率和提升GC的回收效率的目的。

4.GCIH 中的对象还能在多个Java虚拟机进程中实现共享

5.使用Crc32 指令实现JVM intrinsic ,降低JNI 的调用开销

6.针对大数据场景的ZenGC

7.已在淘宝,天猫上线

Dalvik VM

1.由谷歌开发,但是只能称为虚拟机,而不能叫JVM,因为他虽然是使用java语言开发,但是不能直接执行Java的class文件。

2.基于寄存器架构,不是基于栈

3.执行的是编译以后的dex文件,执行效率比较高,适用于Android系统。

4.找一个apk文件,后缀改为zip,可以在电脑里直接解压,进去看到代码结构应该均为dex

2018.4 -> Graal VM

1.由Oracle Labs公开了Graal VM。号称 Run Programs Faster Anywhere

2.在HotSpot的基础上增强而成的跨语言全栈虚拟机,可以作为任意语言的运行平台使用,语言包括Java,Scala,Groovy,Kotlin,c,c++,JS,Ruby,Python,R

3.支持不同语言混用对方的接口和对象,支持这些语言使用已经编写好的本地库文件

JVM上篇:JVM与Java体系结构的更多相关文章

  1. <JVM上篇:内存与垃圾回收篇>01-JVM与Java体系结构

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  2. 【JVM之内存与垃圾回收篇】JVM与Java体系结构

    JVM与Java体系结构 前言 作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题? 运行着的线上系统突然卡死,系统无法访问,甚至直接OOMM! 想解决线上JVM GC问题,但却无从下手. 新 ...

  3. JVM与Java体系结构

    参考笔记:https://blog.csdn.net/weixin_45759791/article/details/107322503 前言 作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问 ...

  4. JVM1 JVM与Java体系结构

    目录 JVM与Java体系结构 虚拟机与Java虚拟机 虚拟机 Java虚拟机 JVM的位置 JVM的整体结构 Java代码执行流程 JVM的架构模型 基于栈的指令级架构 基于寄存器的指令级架构 两种 ...

  5. JVM解毒——JVM与Java体系结构

    你是否也遇到过这些问题? 运行线上系统突然卡死,系统无法访问,甚至直接OOM 想解决线上JVM GC问题,但却无从下手 新项目上线,对各种JVM参数设置一脸懵逼,直接默认,然后就JJ了 每次面试都要重 ...

  6. JVM(三):深入分析Java字节码-上

    JVM(三):深入分析Java字节码-上 字节码文章分为上下两篇,上篇也就是本文主要讲述class文件存在的意义,以及其带来的益处.并分析其内在构成之一 ---字节码,而下篇则从指令集方面着手,讲解指 ...

  7. Java -JVM:JVM百科

    ylbtech-Java -JVM:JVM百科 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机 ...

  8. [转帖]JVM总结--JVM体系结构

    JVM总结--JVM体系结构 https://blog.csdn.net/samjustin1/article/details/52215274 需要不断的学习才可以. 2016年08月15日 22: ...

  9. 深入理解JVM虚拟机11:Java内存异常原理与实践

    本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutori ...

随机推荐

  1. maven 项目搭建,本地环境配置。

    一,下载地址 http://maven.apache.org/download.cgi 英文不好的,可以在浏览器下载个翻译的插件,就好了,我用的是谷歌. 二, 解压文件,安装在自己制定的目录,注意安装 ...

  2. makefile 编译多个目标

    1.静态库libtools.a源码 libtools.h #ifndef tools_h_ #define tools_h_ int sub(int x,int y); int mul(int x,i ...

  3. 面向计算机视觉的深度学习 | iBooker&#183;ApacheCN

    原文:Deep Learning for Computer Vision 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生 ...

  4. iBooker 财务提升星球 2020.2~3 热门讨论

    前两天分享了一下关于我们个人的现金流,今天就以公司的角度去分- 我们技术人,如何开源增加我们的收入? 首先,我们对收入进行下- 热门股要不要买? 参考标准: 1. 时机 2. 泡沫 时- #老实人报# ...

  5. SQL的多表查询(笛卡尔积原理)

    感谢大佬:https://blog.csdn.net/yang5726685/article/details/53538438 MySQL的多表查询(笛卡尔积原理) 先确定数据要用到哪些表. 将多个表 ...

  6. 解决sublime代码不提示的问题

    如果想让sublime在你输入标签的过程中给你提示,需要按要求开启以下功能. 1.开启代码自动提示功能

  7. JAVA初学--Servlet详解

    一.什么是servlet? 处理请求和发送响应的过程是由一种叫做Servlet的程序来完成的,并且Servlet是为了解决实现动态页面而衍生的东西.理解这个的前提是了解一些http协议的东西,并且知道 ...

  8. iOS 模糊、精确搜索匹配功能方法总结 By HL

    字符串搜索主要用于UITableView的搜索功能的筛选,过滤,查询 下面是一些流行的搜索查询方法 一.遍历搜索 for循环 根据要求:精确搜索(判读字符串相等)   模糊搜索(字符串包含) 相关知识 ...

  9. 《Effective Python》笔记——第1章 用Pythonic方式来思考

    一. 遵循PEP8风格指南. PEP8是对python代码格式而编订的风格指南.地址:https://www.python.org/dev/peps/pep-0008/ 个人觉得不一定完全按照PEP8 ...

  10. docker基础——2.镜像管理

    1. Docker镜像的主要特点 (1) 采用分层构建机制. 最底层为bootfs,用于系统引导的文件系统,包括bootloader和kernel,容器启动后会被卸载以节约资源. 其上为rootfs, ...