JVM 全称Java Virtual Machine,也就是我们耳熟能详的Java 虚拟机。它能识别.class 后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。

Java执行流程

​ 当我们编写完程序之后文件就是.Java文件通过Javac指令编译之后就是.class文件,之后就是由JVM将类加载到方法区中,执行引擎执行这些字节码。

​ 过程如下:Java 文件->编译器>字节码->JVM->机器码

JVM的跨平台、跨语言性

  • 跨语言

    ​ 因为JVM是通过识别字节码(.class文件)的方式进行运行的,所以只要其他语言如果也可以编译为字节码文件则也可以在JVM上运行,例如:Groovy、Kotlin等等一些语言。所以JVM也是一定程度上奠定了Java强大的生态圈。

JVM相关实现

​ JVM规范的存在提供了一些JVM的具体的实现。

  • HotSpot

    使用最多的Java虚拟机,通过javac -version的命令可以看到。

  • Jrocket

    原隶属于BEA公司,号称最快的JVM,后被Oracle所收购,与HotSpot所合并。

  • J9

    IBM公司的JVM,主要用于自家产品上(IBM WebSphere 和IBM 的AIX 平台)。

  • TaobaoVM

    淘宝根据HotSpot为自身定制的JVM,目前阿里、天猫都在使用。

  • zing

    属于zual公司,很牛,但是很贵。它的垃圾回收速度非常快,之后它的垃圾回收算法被HotSpot所吸收形成了现在的ZGC。

JVM 整体知识模块

​ 从下图中可以看到JVM的知识模块是比较多的,但是基本上都会与内存结构牵扯到一些关系,所以内存结构是非常重要的一块知识点。

JVM虚拟机基础的更多相关文章

  1. JVM虚拟机基础知识

    1. Java的发展 Java之父:詹姆斯·高斯林 2. Java的技术体系 Java 程序设计语言 JVM class文件格式 编译器 Java API 第三方Java类库 三个版本: Java S ...

  2. 设置TOMCAT的JVM虚拟机内存大小

    你知道如何设置TOMCAT的JVM虚拟机内存大小吗,这里和大家分享一下,JAVA程序启动时JVM都会分配一个初始内存和最大内存给这个应用程序.这个初始内存和最大内存在一定程度都会影响程序的性能. 设置 ...

  3. Java虚拟机基础

    Java虚拟机基础 JVM是Java Virtual Machine的缩写.JVM是一个可以将Java字节码转换成机器语言并能被机器(电脑)执行的Java字节码处理引擎.Java字节码是处于Java和 ...

  4. java语言与jvm虚拟机简介

    一.java语言 1.1 支持面向对象编程oop 强调支持,因为java同样可以面向过程编程. oop的三大特性是:封装.继承.多态. 封装主要针对成员变量而言,oop的思想要求成员变量均为私有,不应 ...

  5. 【JVM虚拟机】(8)--深入理解Class中--方法、属性表集合

    #[JVM虚拟机](8)--深入理解Class中--方法.属性表集合 之前有关class文件已经写了两篇博客: 1.[JVM虚拟机](5)---深入理解JVM-Class中常量池 2.[JVM虚拟机] ...

  6. 程序员从宏观、微观角度浅析JVM虚拟机!

    1.问题 1.JAVA文本文件如何被翻译成CLASS二进制文件? 2.如何理解CLASS文件的组成结构? 3.虚拟机如何加载使用类文件的生命周期? 4.虚拟机系列诊断工具如何使用? 5.虚拟机内存淘汰 ...

  7. JVM虚拟机深入理解+GC回收+类加载

    旭日Follow_24 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/xuri24/article/details/81455449 一,前言 本文章是读了“深入理 ...

  8. 推荐收藏系列:一文理解JVM虚拟机(内存、垃圾回收、性能优化)解决面试中遇到问题(图解版)

    欢迎一起学习 <提升能力,涨薪可待篇> <面试知识,工作可待篇 > <实战演练,拒绝996篇 > 欢迎关注我博客 也欢迎关注公 众 号[Ccww笔记],原创技术文章 ...

  9. 深入理解JVM虚拟机7:JNDI,OSGI,Tomcat类加载器实现

    打破双亲委派模型 JNDI JNDI 的理解   JNDI是 Java 命名与文件夹接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之中的一 ...

随机推荐

  1. global和nonlocal之间的区别

    在局部修全局的:global 在局部修改嵌套的:nonlocal nonlocal代码示范 # 在局部作用域内去修改嵌套作用域内的变量# 当我们在局部作用域内要修改嵌套作用域内的变量时,需要使用non ...

  2. OSM地图本地发布-如何生成各省市矢量地图

    目录 1.缘起 2.问题 3.分析 4.生成自定义地区矢量瓦片 4.1.启动docker 4.2.启动postGIS容器 4.3.设置不清理上次的结果 4.4.删除默认切图范围 4.5.修改切图层级和 ...

  3. 2020年的UWP(5)——UWP和Desktop Extension的双向交互

    上一篇我们提到了怎么在Desktop Extension中等待并处理UWP端发出的request.在本篇中将描述UWP和Desktop Extension双向交互的场景,即存在从两端各自发出reque ...

  4. 多图详解Go的sync.Pool源码

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 本文使用的go的源码时14.4 Pool介绍 总所周知Go 是一个自动垃圾回收的编程语言 ...

  5. redis scan 命令指南

    redis scan 命令指南 1. 模糊查询键值 redis 中模糊查询key有 keys,scan等,一下是一些具体用法. -- 命令用法:keys [pattern] keys name* -- ...

  6. [数据库]000 - 🍳Sysbench 数据库压力测试工具

    000 - Sysbench 数据库压力测试工具 sysbench 是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有 ...

  7. JavaDailyReports10_14

    1 package Test; 2 3 import java.util.Scanner; 4 5 public class Main { 6 7 public static void main(St ...

  8. JVM 低延迟垃圾收集器 Shenandoah 和 ZGC

    本文部分摘自<深入理解 Java 虚拟机第三版> 概述 衡量垃圾收集器的三项指标分别是:内存占用.吞吐量和延迟.这三者共同构成一个"不可能三角",即一款优秀的收集器最多 ...

  9. spark:reducebykey与groupbykey的区别

    从源码看: reduceBykey与groupbykey: 都调用函数combineByKeyWithClassTag[V]((v: V) => v, func, func, partition ...

  10. LAMP搭建 转

    LAMP搭建 LAMP环境配置安装注意安装步骤及说明事项. (一)           安装gcc gcc glibc-devel glibc-headers kernel-headers libgo ...