JVM.......未完待续

Source

一、了解 JVM 

JVM ( Java Virtual Machine ),又称之为 Java虚拟机。JVM 的运行与操作系统无关,能够实现跨平台,只要是安装了JVM的机器,都能运行Java程序,Java语言最重要的特点 "跨平台运行",也正是这个原因。

想要详细了解 Java 推荐大家一本书 << 深入理解Java虚拟机>> (周志明)

而不作为 这个垂直领域(开发编译器 等..)的程序员,我们工作中所要知道的并不多,只需熟记下面的内容。

二、JVM内存划分

Java 程序,就是一个名为 Java的进程,这个进程就是“JVM”,JVM会先从操作系统里申请一大块空间,在这个基础上再划分成几个小的区域。(可以理解成你买个房子,你会规划一下厨房\客厅\卧室...)。而学习JVM内存划分,就是学习这几个区域。

 堆:存放 new 的对象。

 方法区:存放 类对象(加载好的类)。

 栈:分为“本地方法栈”和“虚拟机栈”。本地方法栈:存放本地方法之间的调用关系(本地方法指的是JVM内部使用C++写的代码)。虚拟机栈:用来保存调用关系的内存空间。

 程序计数器:放的是下一个要执行的指令的地址。

牢记:局部变量存放在栈上。成员变量存放在堆上。静态变量是在类对象里,也就是在方法区中。

三、类加载

1. 类加载是干啥的?

Java 程序在运行之前,是先要进行编译,将 .java文件 变成 .class文件(二进制字节码文件)

在运行的时候,JVM进程就会读取对应的 .class 文件,并解析内容,在内存中构造出类对象进行初始化......简单点说就是 将类从文件加载到内存之中

什么是类对象 ?

这个图就是 Java的官方文档截取的,左边是类型 右边是相关属性,日常开发中,我们会遇到版本不兼容的问题,就是因为类对象的格式不同,JDK8 和 JDK19还是有很多区别的。

2. 类加载的大致过程

1. 加载

2. 连接 ---->①验证②准备③解析

3. 初始化

 什么是 双亲委派模型 ?