JVM基本架构及生命周期
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基本架构及生命周期相关推荐
- WatchOS开发教程之一: Watch App架构及生命周期
WatchOS 开发教程系列文章: WatchOS开发教程之一: Watch App架构及生命周期 WatchOS开发教程之二: 布局适配和系统Icon设计尺寸 WatchOS开发教程之三: 导航方式 ...
- Flutter 笔记 | Flutter 核心原理(一)架构和生命周期
Flutter 架构 简单来讲,Flutter 从上到下可以分为三层:框架层.引擎层和嵌入层,下面我们分别介绍: 1. 框架层 Flutter Framework,即框架层.这是一个纯 Dart实现的 ...
- 使用Nomad构建弹性基础架构: 作业生命周期
这是Nomad构建弹性基础架构系列(第1部分,第2部分)中的第三部分.在本系列中,我们将探讨Nomad如何处理意外故障.停机和集群基础架构的日常维护,通常不需要操作员干预. 在本文中,我们将介绍Nom ...
- 【JVM】类的生命周期【转+整理】
参考如下三篇并整理. 1.Java类加载机制详解 2.深入理解Java:类加载机制及反射 3.jvm系列(一):java类的加载机制 类的生命周期是从被加载到虚拟机内存中开始,到卸载出内存结束.过程共 ...
- 什么是Java的灵魂?了解JVM的结构模型,生命周期,Java王朝虚拟机的更替,各家大厂虚拟机百花齐放
- 【Elasticsearch】使用索引生命周期管理实现热温冷架构
1.概述 [Elasticsearch]Elasticsearch 索引生命周期管理 转载:使用索引生命周期管理实现热温冷架构 索引生命周期管理 (ILM) 是在 Elasticsearch 6.6( ...
- Java中的垃圾回收与对象生命周期
转载自 Java中的垃圾回收与对象生命周期 1. 垃圾回收 垃圾回收是Java程序设计中内存管理的核心概念,JVM的内存管理机制被称为垃圾回收机制. 一个对象创建后被放置在JVM的堆内存中,当永远 ...
- 使用“管道”与“应用程序生命周期”重构:可插拔模块
本篇博客依然用于总结工作中遇到的较有用的设计模式. 入正题. 历史代码 我目前开发的系统中,要实现以模块的方式进行动态扩展.这些模块是以独立程序集的方式嵌入到系统中.原系统中,使用了一个简单的接口 I ...
- JVM 学习一:JVM 的构架模型及生命周期
JVM 的架构模型 Java 编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构. 具体来说,这两种架构之间的区别: 基于栈式架构的特点: 设计和实现更简单 ...
最新文章
- 预训练图像处理Transformer
- windows python读取grib2数据
- mysql中selectform_带有select标签的form表单,怎么提交到数据库啊 ?具体情况如下...
- H.264 Profile、Level、Encoder三张简图
- 前端的葵花宝典 - 红宝书《JavaScript高级程序设计(第4版)》学习笔记
- FFmpeg non-existing PPS 0 referenced问题描述
- 大学计算机专业绩点3.7什么水平,大学绩点3.0什么水平 大学里的绩点有什么用...
- python : 自定义可迭代类,__iter__ ,__next__的作用
- 苹果mac文档处理工具:microsoftword
- Unity Input键盘输入无反应
- java随机生成三位数
- 【课程·研】软件工程 | 结对编程:建造金字塔(1157)
- 什么是蜘蛛统计 有什么作用?
- [转]linux grep命令的使用
- python爬虫 爬取猫眼电影数据
- 【动作】Cocosd-x3.x 动作类归纳
- 攻防世界 web高手进阶区 8分题 Web_python_block_chain
- 两计算机配置ip地址,简单配置ip地址
- 四轴飞控软件开发计划
- 全屏游戏中自动切出到桌面的问题解决
热门文章
- oracle数据库 gbk,oracle 数据库编码转换(转GBK) | 学步园
- [UOJ55]紫荆花之恋
- linux下测试磁盘的读写IO速度-简易方法
- Spark 学习文章
- 继续过中等难度.0309
- 9款精致HTML5/jQuery日历时钟控件源码下载(源码请见百度云) 链接:http://pan.baidu.com/s/1geIXe75 密码:7m4a...
- 自己写的一个tomcat发布脚本
- JQ_Web Uploader图片上传控件
- java异常处理好习惯
- HTML5 Canvas 基础API和实例