ErCargo's Coffee Time

以大多数人的努力程度之低,根本轮不到拼天赋

Action Conquers Fear, Impetuous, Indolence and so on. (行动能够克服一切恐惧,浮躁,懒惰)


Welcome to star and fork my github

Java虚拟机学习笔记

  • Java 虚拟机

Java 虚拟机

虚拟机是一种抽象化的计算机, 通过在实际的计算机上仿真模拟各种计算机功能来实现; Java 虚拟机 有自己完善的硬件架构,如: 处理器、堆栈、寄存器,还有相应的指令系统; Java 虚拟机 屏蔽了与具体操作系统平台相关的信息, 使得 Java 程序只需要生成在 Java 虚拟机上运行的目标代码(即字节码)就可以在多种平台上不加修改的运行

Java 程序之所以可以「一次编译,到处运行」 原因是: 
- Java 虚拟机对各种不同的操作系统/平台进行了定制;
- 无论在什么平台都可以编译生成固定的字节码(.class 文件)供 JVM 使用

JVM 是一个内存中的虚拟机,JVM 的存储就是内存,所有 类、常量、变量、方法都在内存中。

JVM 的组成部分:

Java 虚拟机

  1. Class Loader: 作用: 加载编译后的 class 文件到内存
  2. RunTime Data Area: JVM 内存模型
  3. Execution Engine: 解析 class 文件中的字节码, 解析后提交到操作系统中执行
  4. Native Interface: 本地接口,融合不同的编程语言的原生库为 Java 所用

Q: JVM 如何加载 .class 文件

A: JVM 由 4个部分组成,包括 ClassLoader, Runtime Data Area, Execution Engine 和 Native Interface;
主要通过 ClassLoader 将符合虚拟机规范的 class 文件加载到内存中, 再通过 Execution Engine 解析 Class 文件中的字节码,
提交给操作系统执行

思考:类从编译到执行的过程

Java 运行示意图(摘自其他网站)

  *.java file  --> Java Compiler(javac) --> *.class file --> Java Virtual Machine
  
  Java Virtual Machine: 
   - ClassLoader
   - ByteCode Verifier
   - Java Runtime System
   - Native OS
最近的文章

Java 类加载之 ClassLoader

JVM 的组成部分 什么是 ClassLoaderJVM 组成部分 Class Loader: 作用: 加载编译后的 class 文件到内存 RunTime Data Area: JVM 内存模型 Execution Engine: 解析 class 文件中的字节码, 解析后提交到操作系统中执行 Native Interface: 本地接口,融合不同的编程语言的原生库为 Java 所用Q: JVM 如何加载 .class 文件A: JVM 由 4个部分组成,包括 ClassL...…

继续阅读
更早的文章

Java 字节码学习笔记

Java 字节码 Java 字节码结构 Java 字节码增强技术Java 字节码为什么叫 Java 字节码? 字节码文件由十六进制值组成, JVM 以 2 个十六进制值为 1组 进行读取, (2个16进制值表示一个字节); Java 可以一次编译,到处运行的原因: JVM 针对各种操作系统、平台进行了定制; 无论在什么平台,都可以编译生成固定的字节码(.class 文件)供 JVM 使用 字节码很重要通过字节码可以直观的看到 Volatile 关键字如何在字节...…

继续阅读