jvm的简介

什么是jvm?

java虚拟机就是二进制字节码的运行环境。我们可以把jvm看做是运行在不同系统上的一个软件应用的计算机,就比如说我们要打开图片,就得用看图软件,或者我们要对文件进行解压,是不是得用解压软件。就可以把它看出是一个软件,但是它是虚拟的,而且它是不与硬件是直接交互。

jvm的简介

jvm是干啥的?

Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行。因此在运行时,Java源程序需要通过编译器编译成为.class文件。jvm 只对字节码负责,就像函数式的关系,他不用关心是有什么语言编译的,只关心,编译后的字节码是否符合JVM 的规定,任何语言编译后的字节码文件只要符合jvm标准,然后都是可以在jvm上运行

jvm的简介

虚拟机的作用

Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。这个也就是java跨平台性的根本原因。

特点:

1,一次编译,到处运行

2,自动内存管理

3,自动垃圾回收功能

虚拟机的历史

现在流行的三大虚拟机:

  • Hotspot
  • JRockit
  • IBM 的 J9

我们平时所说的就是Hotsprot虚拟机

jvm的架构模型

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

基于栈式架构的特点

  • 设计和实现更简单,适用于资源受限的系统;
  • 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小编译器容易实现。
  • 不需要硬件支持,可移植性更好,更好实现跨平台·基于寄存器架构的特点。

总结:

由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。

jvm的生命周期

虚拟机的启动:

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

虚拟机的执行

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

jvm的内存模型:

jvm的简介

如果对jvm内存模型不太了解可以参考文章:java内存区域模型和详解 – 古渡蓝按 – 博客园 (cnblogs.com)

Original: https://www.cnblogs.com/blbl-blog/p/16243773.html
Author: 古渡蓝按
Title: jvm的简介

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/609576/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 小程序字节转GBK及UTF8

    前段时间在Android原生搞的BLE扫码枪又要移植到小程序上来。本以为小程序不支持BLE的,结果一搜,还真支持-_-|| 。 蓝牙部分问题不大,遇到的主要问题是, 小程序环境如何…

    Java 2023年6月15日
    084
  • Spring Boot入门一:在Eclipse中使用Spring boot

    1.安装插件 打开Eclipse-Help-Eclipse Marketplace-搜索spring tools,找到对应工具安装 下载完成后,重启eclipse,选择新建proj…

    Java 2023年5月30日
    071
  • IDEA导入项目后文件出现时钟的原因及解决方案

    IDEA导入项目后文件出现时钟的标志 原因:没有将项目添加为Maven项目 解决方案: 找到项&#x76E…

    Java 2023年6月7日
    077
  • Spring Boot

    Spring Boot 1 Spring Boot入门 1.1 Spring Boot特性: 能够快速创建基于 Spring 的应用程序 能够直接使用 java main 方法启动…

    Java 2023年6月13日
    068
  • vue.js和node.js的关系

    在学习vue的时候最先安装的就是node.js环境。那么没有node.js环境,vue.js能不能运行呢? 首先说一下node.js 就前端来说nodejs具有划时代的意义, 做前…

    Java 2023年6月5日
    073
  • 程序人生|从网瘾少年到微软、BAT、字节offer收割机逆袭之路

    有情怀,有干货,微信搜索【 三太子敖丙】关注这个不一样的程序员。本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点、资料…

    Java 2023年6月9日
    096
  • 【HarmonyOS】【JAVA UI】 HarmonyOS如何集成华为分享

    ​ 参考资料 服务接入华为分享开发指导 代码集成 1.集成IDL接口,用于建立分享方与华为分享的交互通道,完成后续服务分享过程。 在”java”目录同级目录…

    Java 2023年5月29日
    0106
  • LeetCode随缘刷题之两数相加

    逐步解释,有说错的地方欢迎指正。 package leetcode.day_12_03; public class AddTwoNumbers0002 { public ListN…

    Java 2023年6月7日
    082
  • WCF 返回json的时间格式的转换

    有朋友用这个办法不错 1、把”\/Date(976723200000+0800)\/”中的976723200000提取出来,这一步无论是正则还是substr…

    Java 2023年6月14日
    080
  • 数据结构总结

    数据结构是指存在特定相互关系的数据元素的集合。元素之间的相互关系称为数据的逻辑结构,数据元素及元素之间关系的存储称为存储结构或物理结构。通常情况下,精心选择的数据结构可以带来更高的…

    Java 2023年6月7日
    079
  • Halo 开源项目学习(三):注册与登录

    基本介绍 首次启动 Halo 项目时需要安装博客并注册用户信息,当博客安装完成后用户就可以根据注册的信息登录到管理员界面,下面我们分析一下整个过程中代码是如何执行的。 博客安装 项…

    Java 2023年6月9日
    062
  • 2022保研经历-有删减

    2022 保研经历 我也知道大家仅仅是想看题目而已。 恕我直言,那些 排版混乱 ,看起来讲了很多,实际上既没有提供面试题目,也没有提供备考经验,反而只感动自己、像记流水账、对别人没…

    Java 2023年6月7日
    066
  • 04、SpringBoot 启动 准备运行环境(prepareEnvironment)流程(一)

    目录:Springboot源码学习目录上文:03、SpringBoot 启动 执行SpringApplication的run方法 准备运行环境前 流程前言: 一、准备运行环境方法(…

    Java 2023年6月13日
    0107
  • SpringCloud之Seata

    1.Seata是什么? 1.1 概念:Seata 是一款开源的分布式事务解决方案,提供高性能和简单易用的分布式事务服务。1.2 术语(1)TC: 事务协调者维护全局和分支事务的状态…

    Java 2023年6月13日
    058
  • Java 的强引用、弱引用、软引用、虚引用

    转载自:https://www.cnblogs.com/gudi/p/6403953.html 1、强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象…

    Java 2023年5月29日
    0102
  • JDK成长记15:从0分析你不知道的synchronized底层原理(上)

    前几节你应该已经了解和掌握了Thread、ThreadLocal、Volatile这几个并发基础知识的底层原理。这一节,你可以跟我一起深入了解下synchronized关键字的底层…

    Java 2023年6月5日
    0100
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球