JVM基本架构及生命周期

Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成。JVM平台的各种语言可以共享Java虚拟机带来的跨平台性、优秀的垃圾回器,以及可靠的即时编译器。

JVM简单架构

JVM完整架构

Java虚拟机作用:

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

JVM特点:

  • 一次编译,到处运行
  • 自动内存管理
  • 自动垃圾回收功能

JVM的架构模型:Java编译器输入的指令流基本上是一种基于栈的指令集架构。

基于栈式架构的特点:

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

程序的编译和运行过程

JVM生命周期

虚拟机的启动

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

虚拟机的执行

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

虚拟机的退出

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

JVM基本架构及生命周期相关推荐

  1. WatchOS开发教程之一: Watch App架构及生命周期

    WatchOS 开发教程系列文章: WatchOS开发教程之一: Watch App架构及生命周期 WatchOS开发教程之二: 布局适配和系统Icon设计尺寸 WatchOS开发教程之三: 导航方式 ...

  2. Flutter 笔记 | Flutter 核心原理(一)架构和生命周期

    Flutter 架构 简单来讲,Flutter 从上到下可以分为三层:框架层.引擎层和嵌入层,下面我们分别介绍: 1. 框架层 Flutter Framework,即框架层.这是一个纯 Dart实现的 ...

  3. 使用Nomad构建弹性基础架构: 作业生命周期

    这是Nomad构建弹性基础架构系列(第1部分,第2部分)中的第三部分.在本系列中,我们将探讨Nomad如何处理意外故障.停机和集群基础架构的日常维护,通常不需要操作员干预. 在本文中,我们将介绍Nom ...

  4. 【JVM】类的生命周期【转+整理】

    参考如下三篇并整理. 1.Java类加载机制详解 2.深入理解Java:类加载机制及反射 3.jvm系列(一):java类的加载机制 类的生命周期是从被加载到虚拟机内存中开始,到卸载出内存结束.过程共 ...

  5. 什么是Java的灵魂?了解JVM的结构模型,生命周期,Java王朝虚拟机的更替,各家大厂虚拟机百花齐放

  6. 【Elasticsearch】使用索引生命周期管理实现热温冷架构

    1.概述 [Elasticsearch]Elasticsearch 索引生命周期管理 转载:使用索引生命周期管理实现热温冷架构 索引生命周期管理 (ILM) 是在 Elasticsearch 6.6( ...

  7. Java中的垃圾回收与对象生命周期

    转载自   Java中的垃圾回收与对象生命周期 1. 垃圾回收 垃圾回收是Java程序设计中内存管理的核心概念,JVM的内存管理机制被称为垃圾回收机制. 一个对象创建后被放置在JVM的堆内存中,当永远 ...

  8. 使用“管道”与“应用程序生命周期”重构:可插拔模块

    本篇博客依然用于总结工作中遇到的较有用的设计模式. 入正题. 历史代码 我目前开发的系统中,要实现以模块的方式进行动态扩展.这些模块是以独立程序集的方式嵌入到系统中.原系统中,使用了一个简单的接口 I ...

  9. JVM 学习一:JVM 的构架模型及生命周期

    JVM 的架构模型 Java 编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构. 具体来说,这两种架构之间的区别: 基于栈式架构的特点: 设计和实现更简单 ...

最新文章

  1. 预训练图像处理Transformer
  2. windows python读取grib2数据
  3. mysql中selectform_带有select标签的form表单,怎么提交到数据库啊 ?具体情况如下...
  4. H.264 Profile、Level、Encoder三张简图
  5. 前端的葵花宝典 - 红宝书《JavaScript高级程序设计(第4版)》学习笔记
  6. FFmpeg non-existing PPS 0 referenced问题描述
  7. 大学计算机专业绩点3.7什么水平,大学绩点3.0什么水平 大学里的绩点有什么用...
  8. python : 自定义可迭代类,__iter__ ,__next__的作用
  9. 苹果mac文档处理工具:microsoftword
  10. Unity Input键盘输入无反应
  11. java随机生成三位数
  12. 【课程·研】软件工程 | 结对编程:建造金字塔(1157)
  13. 什么是蜘蛛统计 有什么作用?
  14. [转]linux grep命令的使用
  15. python爬虫 爬取猫眼电影数据
  16. 【动作】Cocosd-x3.x 动作类归纳
  17. 攻防世界 web高手进阶区 8分题 Web_python_block_chain
  18. 两计算机配置ip地址,简单配置ip地址
  19. 四轴飞控软件开发计划
  20. 全屏游戏中自动切出到桌面的问题解决

热门文章

  1. oracle数据库 gbk,oracle 数据库编码转换(转GBK) | 学步园
  2. [UOJ55]紫荆花之恋
  3. linux下测试磁盘的读写IO速度-简易方法
  4. Spark 学习文章
  5. 继续过中等难度.0309
  6. 9款精致HTML5/jQuery日历时钟控件源码下载(源码请见百度云) 链接:http://pan.baidu.com/s/1geIXe75 密码:7m4a...
  7. 自己写的一个tomcat发布脚本
  8. JQ_Web Uploader图片上传控件
  9. java异常处理好习惯
  10. HTML5 Canvas 基础API和实例