JVM是一种规范

Java程序的执行过程

一个 Java 程序,首先经过 javac 编译成 .class 文件,然后 JVM 将其加载到方法区,执行引擎将会执行这些字节码。执行时,会翻译成操作系统相关的函数。JVM 作为 .class 文件的翻译存在,输入字节码,调用操作系统函数。

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

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

JVM、JRE、JDK的关系

JVM只是一个翻译,把Class翻译成机器识别的代码,但是需要注意,JVM 不会自己生成代码,需要大家编写代码,同时需要很多依赖类库,这个时候就需要用到JRE。

JRE是什么,它除了包含JVM之外,提供了很多的类库(就是我们说的jar包,它可以提供一些即插即用的功能,比如读取或者操作文件,连接网络,使用I/O等等之类的)这些东西就是JRE提供的基础类库。JVM 标准加上实现的一大堆基础类库,就组成了 Java 的运行时环境,也就是我们常说的 JRE(Java Runtime Environment)。

但对于程序员来说,JRE还不够。我写完要编译代码,还需要调试代码,还需要打包代码、有时候还需要反编译代码。所以我们会使用JDK,因为JDK还提供了一些非常好用的小工具,比如 javac(编译代码)、java、jar (打包代码)、javap(反编译<反汇编>)等。这个就是JDK。

从跨平台到跨语言

跨平台:我们写的一个类,在不同的操作系统上(Linux、Windows、MacOS 等平台)执行,效果是一样,这个就是JVM的跨平台性。

为了实现跨平台型,不同操作系统有对应的JDK的版本。

跨语言(语言无关性)

JVM只识别字节码,所以JVM其实跟语言是解耦的,也就是没有直接关联,JVM运行不是翻译Java文件,而是识别class文件,这个一般称之为字节码。还有像Groovy 、Kotlin、Scala等等语言,它们其实也是编译成字节码,所以它们也可以在JVM上面跑,这个就是JVM的跨语言特征。Java的跨语言性一定程度上奠定了非常强大的java语言生态圈

【Java】JVM学习(一)相关推荐

  1. java jvm学习笔记二(类装载器的体系结构)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao                  在了解java虚拟机的类装载器之前,有一个概念我们是必须先知道的,就是java的沙箱, ...

  2. Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论

    Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...

  3. Java虚拟机JVM学习05 类加载器的父委托机制

    Java虚拟机JVM学习05 类加载器的父委托机制 类加载器 类加载器用来把类加载到Java虚拟机中. 类加载器的类型 有两种类型的类加载器: 1.JVM自带的加载器: 根类加载器(Bootstrap ...

  4. Java虚拟机学习(8):查看JVM参数及值的命令行工具

    查看JVM各个参数值方式 1. HotSpot vm中的各个globals.hpp文件  查看jvm初始的默认值及参数 globals.hpp globals_extension.hpp c1_glo ...

  5. java虚拟机学习-JVM调优总结-新一代的垃圾回收算法(11)

    java虚拟机学习-深入理解JVM(1) java虚拟机学习-慢慢琢磨JVM(2) java虚拟机学习-慢慢琢磨JVM(2-1)ClassLoader的工作机制 java虚拟机学习-JVM内存管理:深 ...

  6. 从JVM入手,聊聊Java的学习和复习!

    我们在学习的时候,经常会遇到这样一个问题: 「学完就忘」 这个问题大部分人都会遇到,那么我们今天就来聊聊,为啥会学了就忘呢? 我根据自己的学习经验,大致总结以下三点原因: 1.知识没有用起来 2.没有 ...

  7. JVM学习教程,带你轻松掌握Java虚拟机,吊打面试官

    前言: Java 虚拟机日益成为互联网大厂面试的重要内容,对于 Java 开发者而言,只有在了解 Java 背后的原理后,才能写出更高质量的代码,才能在错综复杂的 bug 中快速定位出问题并找到解决方 ...

  8. java虚拟机预先加载哪些类_Java虚拟机JVM学习02 类的加载概述

    Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...

  9. JVM学习笔记(Ⅰ):Class类文件结构解析(带你读懂Java字节码,这一篇就够了)

    JVM学习笔记(Ⅰ):Class类文件结构解析,带你读懂Java字节码 前言:本文属于博主个人的学习笔记,博主也是小白.如果有不对的地方希望各位帮忙指出.本文主要还是我的学习总结,因为网上的一些知识分 ...

  10. java 设置年轻代堆大小,[JVM学习之路]五堆(一)堆的内存结构参数设置分代思想内存分配...

    [JVM学习之路]五堆(一)堆的内存结构参数设置分代思想内存分配 [JVM学习之路]五.堆(一)堆的内存结构.参数设置.分代思想.内存分配策略及TLAB 一.堆的核心概述 堆的特点: 1.一个jvm实 ...

最新文章

  1. 知识点丨你一定要了解的Win10 RS2重大更新,绝不只是装补丁!
  2. linux 添加banner,OpenWrt:Linux下生成banner
  3. 【若依(ruoyi)】table定制列宽
  4. when is completed field filled in the backend
  5. linux 可道云_如何搭建私有云
  6. vscode右键没有open in browser
  7. AC日记——Roma and Poker codeforces 803e
  8. windows下检測文件改变
  9. Python学习资源收集
  10. Java下载及环境配置
  11. 网易VIP等级,QQ会员等级,TOMVIP邮箱多少钱?
  12. 【矩阵论】6. 正规方程与矩阵方程求解
  13. java面试笔记整理
  14. 华为鸿蒙系统建立生态链的环境,华为自研操作系统,怎么构建生态?感觉太难了?...
  15. 拓扑排序 by zyz on 2021/4/11
  16. ACA世界大赛_让青年设计发声, 第二期!
  17. 基于Linux(CentOS7)的网络服务器配置
  18. 约瑟夫环问题(递推公式)
  19. Django指令和配置文件
  20. Individual Tree Segmentation Method Based on Mobile Backpack LiDAR Point Clouds

热门文章

  1. 基于Java+SSM+MySQL的水果商城系统
  2. 春节也提分?人民日报精选80分申论范文之二
  3. java 判断字符和字符串是否为全角字符
  4. 项目实战-mock测试
  5. Spring Boot 远程调试
  6. WSL2安装及其python环境配置
  7. 深度学习中的优化算法之AdaGrad
  8. 大厂通用最全IDEA使用手册
  9. web端学习day02
  10. 基本折线图:最直观呈现数据的趋势和变化