一、了解 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. 初始化
什么是 双亲委派模型 ?