JVM(一)JVM概述

简介: JVM(一)JVM概述

JVM概述

基本介绍

JVM:全称 Java Virtual Machine,是 Java 虚拟机,一种规范,本身是一个虚拟计算机,直接和操作系统进行交互,与硬件不直接交互,而操作系统可以帮我们完成和硬件进行交互的工作。是主流虚拟机

特点:

  • Java 虚拟机基于二进制字节码执行,由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆、一个方法区等组成
  • JVM 屏蔽了与操作系统平台相关的信息,从而能够让 Java 程序只需要生成能够在 JVM 上运行的字节码文件,通过该机制实现的跨平台性

Java 代码执行流程:Java 程序 --(编译)--> 字节码文件 --(解释执行)--> 操作系统(Win,Linux)

JVM、JRE、JDK 对比:

  • JDK(Java SE Development Kit):Java 标准开发包,提供了编译、运行 Java 程序所需的各种工具和资源
  • JRE( Java Runtime Environment):Java 运行环境,用于解释执行 Java 的字节码文件

构模型

Java 编译器输入的指令流是一种基于栈的指令集架构。因为跨平台的设计,Java 的指令都是根据栈来设计的,不同平台 CPU 架构不同,所以不能设计为基于寄存器架构

  • 基于栈式架构的特点:
  • 设计和实现简单,适用于资源受限的系统
  • 使用零地址指令方式分配,执行过程依赖操作栈,指令集更小,编译器容易实现
  • 零地址指令:机器指令的一种,是指令系统中的一种不设地址字段的指令,只有操作码而没有地址码。这种指令有两种情况:一是无需操作数,另一种是操作数为默认的(隐含的),默认为操作数在寄存器(ACC)中,指令可直接访问寄存器
  • 一地址指令:一个操作码对应一个地址码,通过地址码寻找操作数
  • 不需要硬件的支持,可移植性更好,更好实现跨平台
  • 基于寄存器架构的特点:
  • 需要硬件的支持,可移植性差
  • 性能更好,执行更高效,寄存器比内存快
  • 以一地址指令、二地址指令、三地址指令为主

生命周期

JVM 的生命周期分为三个阶段,分别为:启动、运行、死亡

  • 启动:当启动一个 Java 程序时,通过引导类加载器(bootstrap class loader)创建一个初始类(initial class),对于拥有 main 函数的类就是 JVM 实例运行的起点
  • 运行
  • main() 方法是一个程序的初始起点,任何线程均可由在此处启动
  • 在 JVM 内部有两种线程类型,分别为:用户线程和守护线程,JVM 使用的是守护线程,main() 和其他线程使用的是用户线程,守护线程会随着用户线程的结束而结束
  • 执行一个 Java 程序时,真真正正在执行的是一个 Java 虚拟机的进程
  • JVM 有两种运行模式 Server 与 Client,两种模式的区别在于:Client 模式启动速度较快,Server 模式启动较慢;但是启动进入稳定期长期运行之后 Server 模式的程序运行速度比 Client 要快很多
    Server 模式启动的 JVM 采用的是重量级的虚拟机,对程序采用了更多的优化;Client 模式启动的 JVM 采用的是轻量级的虚拟机
  • 死亡
  • 当程序中的用户线程都中止,JVM 才会退出
  • 程序正常执行结束、程序异常或错误而异常终止、操作系统错误导致终止
  • 线程调用 Runtime 类 halt 方法或 System 类 exit 方法,并且 Java 安全管理器允许这次 exit 或 halt 操作
目录
相关文章
|
3月前
|
Java 应用服务中间件
深入理解JVM - 类加载器概述
深入理解JVM - 类加载器概述
19 0
|
10月前
|
算法 Java UED
JVM之垃圾回收器概述
JVM之垃圾回收器概述
|
8月前
|
安全 前端开发 Java
JVM概述和类加载子系统
我记得当年学java的时候,就很好奇,为什么我在IDEA上写一些代码(其实就是一堆我们人能知道的英文单词的组合加一些运算符),为什么就可以在windows上运行后执行我们的指令,而且还可以打成jar包去linux系统跑起来,为什么一份代码可以在不同平台运行呢?类是如何加载的?对象如何创建的以及都有哪些信息?我创建的对象被分配到哪个内存去了?java是怎么和我们操作系统打交道的又是怎么调用CPU为我们计算的?创建了对象分配了内存,为什么可以不用手动回收就可以自动清理内存等等等,相信你也同样有过这些困惑。
57 0
|
10月前
|
监控 算法 Java
jvm之垃圾回收概述解读
jvm之垃圾回收概述解读
|
11月前
|
存储 算法 安全
《深入理解Java虚拟机》读书笔记(五)--垃圾收集算法概述
《深入理解Java虚拟机》读书笔记(五)--垃圾收集算法概述
44 0
|
12月前
|
Java 应用服务中间件
深入理解JVM - 类加载器概述
上一节我们简单了解了jvm类加载器的步骤并详细分析了jvm类加载步骤的详细细节,本节将会接着讲述关于双亲委派机制的细节。双亲委派机制是jvm一个类加载的重要加载机制,它是jvm的类继承结构的底层设计也是jvm类加载的核心步骤,我们通常使用的tomcat对于双亲委派机制进行了破坏这也是需要了解的内容。
54 0
|
缓存 算法 安全
51.【面试宝典】面试宝典-JVM参数概述
【面试宝典】面试宝典-JVM参数概述
51.【面试宝典】面试宝典-JVM参数概述
|
缓存 安全 Java
JVM 从入门到精通(四)运行时数据区概述及JVM中的线程说明
JVM 从入门到精通(四)运行时数据区概述及JVM中的线程说明
92 0
JVM 从入门到精通(四)运行时数据区概述及JVM中的线程说明
|
监控 安全 固态存储
JVM性能监控与调优之概述命令行篇
JVM性能监控与调优之概述命令行篇
649 0
JVM性能监控与调优之概述命令行篇
|
存储 人工智能 安全
JVM字节码指令集概述
字节码指令集概述
359 0
JVM字节码指令集概述