目录
一、JVM的概念
1、JVM的具体作用
jvm是什么?
jvm是java虚拟机Java Virtual Machine的缩写。
什么是java虚拟机?
虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。简单来说JVM是用来解析和运行Java程序的。
java虚拟机的好处?
java可以跨平台运行最主要的原因就是因为有java虚拟机,同时jvm可以屏蔽系统差异发明一些新的语言就可以使用jvm来完成。这样就做到了《一次编译到处运行》的特点。
2、JVM中内存区域的划分
要想知道JVM中内存区域的划分,拿首先就要知道JVM中的内存区域从什么地方来,JVM中的内存是JVM向操作系统中申请一块内存,在针对这个内存划分一个区域。
堆(运行时常量池) | new的对象就会放在堆中 |
方法区 | 加载好的类放在方法区,静态成员 |
栈(JVM栈和本地方法栈) | 局部变量 |
程序计数器 | 存储的是地址描述的是当前线程接下来 要执行的指令在什么地方 |
注意:一个进程中存在多个线程,每个线程中都存在自己的栈和程序程序计数器,一个进程中共用一个堆和一个方法区。
判断一个变量是在堆上还是在栈上,和这个变量是基础类型还是引用类型没有关系,和这个变量是局部变量、静态变量还是成员变量有关。
3、常见的面试问题
1)如何理解基础数据类型还是引用数据类型
基础数据类型中对应的内存空间储存的是具体的值
引用数据类型中对应的内存空间存储的是new对象的地址
2)如何理解引用和对象
引用还是存储的是地址,new对象是本体。
3)如何理解局部变量成员变量以及静态变量
成员变量在堆上
局部变量在栈上
静态变量在方法区中
public class Test01 {
//成员变量
Test01 t1=new Test01();
//静态变量
static Test01 t2=new Test01();
public static void main(String[] args) {
//局部变量
Test01 t3=new Test01();
}
}
4)递归的执行过程
<