定义:
JAVA Virtual Machine程序的运行环境(java二进制字节码的运行环境)。
好处:
- 一次编写,到处运行
- 自动内存管理,垃圾回收功能
- 数组下标越界,越界检查,抛异常
- 多态
比较:
jvm,jdk,jre


常见的jvm:
jvm是一种规范
内存结构:
- 程序计数器(寄存器)
- 虚拟机栈
- 本地方法栈
- 堆
- 方法区
程序计数器(寄存器):
JAVA源代码→jvm指令,二进制字节码→解释器→机器码→CPU
作用:
在一系列指令中,记住下一个jvm指令的执行地址。
寄存器是整个CPU中读写最快的部件。
特点:
1.线程私有;
2.不会存在内存溢出。
虚拟机栈:
定义:
栈-线程运行需要的内存空间。
栈帧-每个方法运行时需要的内存。


- 垃圾回收不涉及栈内存。栈内存由线程自动管理(方法调用入栈、执行完出栈),垃圾回收仅针对堆内存中不再被引用的对象。
- 栈内存不是分配越大越好。栈过大会减少进程可创建的线程数,且超出物理内存会触发页交换,反而降低性能。
- 方法内局部变量是线程安全的。局部变量存储在栈帧中,每个线程有独立栈,不存在多线程共享的情况。
hotspot
栈内存溢出:

线程运行诊断:

本地方法栈
堆:


方法区:

定义

组成
方法区内存溢出

运行时常量池
