什么是JVM
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
JVM的位置
JVM的体系结构
类加载器(Class Loder)
作用:加载Class文件
Native
凡是带了native关键字的,说明java的作用达不到了,回去调用底层C语言的库!
会进入本地方法栈
调用本地方法本地接口 JNI
JNI作用:扩展java的使用融合不同的编程语言为java所用!
它在内存区域中专门开辟了一块标记区域:Native Method Stack 登记native方法
在最终执行的时候,加载本地方法库中的方法通过JNI
方法区
死背下面的话
静态变量,常量,类信息(构造方法,接口定义)。运行时的常量池存在方法区中,但是实例变量存在堆内存中,和方法区无关
程序计数器
程序计数器是一块较小的内存空间,它可以看作是:保存当前线程所正在执行的字节码指令的地址(行号)
由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,一个处理器都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都有一个独立的程序计数器,各个线程之间计数器互不影响,独立存储。称之为“线程私有”的内存。程序计数器内存区域是虚拟机中唯一没有规定OutOfMemoryError情况的区域。
深入理解栈
栈:先进后出,后进先出
队列:先进先出(FIFO0)Firdt Input First Output
栈:栈内存,主管程序的运行,声明周期和线程同步
线程结束,栈内存就释放,对于栈来说不存在垃圾回收的问
一旦线程结束,栈就Over
栈会放哪些东西:8大基本类型+对象的引用+实例的方法
栈运行的原理:栈帧
栈满了:StackOverflowError
栈+堆+方法区的交互关系: