JVM学习笔记
来源:互联网 发布:欧姆社 漫画数据库 编辑:程序博客网 时间:2024/05/20 20:20
JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) , JVM Stack(栈),Native Method Stack ( 本地方法栈 ),其中Method Area 和 Heap 是线程共享的 ,JVM Stack,Native Method Stack 和Program Counter Register 是非线程共享的。
其中,
(1)方法区存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发人员在程序中通过Class对象中的getName、isInterface等方法来获取信息时,这些数据都来源于方法区域,同时方法区域也是全局共享的,在一定的条件下它也会被GC,当方法区域需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息;
(2)堆是JVM用来存储对象实例以及数组值的区域,可以认为Java中所有通过new创建的对象的内存都在此分配,Heap中的对象的内存需要等待GC进行回收。堆是JVM中所有线程共享的,因此在其上进行对象内存的分配均需要进行加锁,这也导致了new对象的开销是比较大的,原则上讲,所有的对象都在堆区上分配内存;
(3)程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行;
(4)栈是线程私有的,每个线程创建的同时都会创建JVM栈,JVM栈中存放的为当前线程中局部基本类型的变量(java中定义的八种基本类型:boolean、char、byte、short、int、long、float、double)、部分的返回结果以及Stack Frame,非基本类型的对象在JVM栈上仅存放一个指向堆上的地址;
(5)本地方法栈用来支持native方法的执行,此区域用于存储每个native方法调用的状态。
JVM初始运行的时候都会分配好 Method Area(方法区) 和Heap(堆) ,而JVM 每遇到一个线程,就为其分配一个 Program Counter Register(程序计数器) , VM Stack(虚拟机栈)和Native Method Stack (本地方法栈), 当线程终止时,三者(虚拟机栈,本地方法栈和程序计数器)所占用的内存空间也会被释放掉。非线程共享的那三个区域的生命周期与所属线程相同,而线程共享的区域与JAVA程序运行的生命周期相同,所以这也是系统垃圾回收的场所只发生在线程共享的区域(实际上对大部分虚拟机来说知发生在Heap上)的原因。
- JVM 学习笔记
- JVM原理学习笔记
- JVM学习笔记
- JVM原理学习笔记
- JVM 学习笔记
- JVM学习笔记
- jvm学习笔记总结
- JVM学习笔记
- JVM学习笔记
- JVM学习笔记
- jvm学习笔记(一)
- JVM 学习笔记
- JVM 学习笔记
- JVM学习笔记-基础知识
- Dalvik、JVM学习笔记
- JVM 学习笔记
- jvm学习笔记
- JVM学习笔记
- 第三周 项目4 -顺序表应用
- Java数组初识
- ListView 上下边界蓝色或黄色阴影
- 【0】Java学习大纲
- poj1753 枚举+深搜
- JVM学习笔记
- 【软考之线性表解析】
- C#下载实例(三)-断点下载
- mybatis bind 插入不同表
- Linux 将成为 21 世纪汽车的主要操作系统
- Android中的Handler信息传递机制
- AutoCAD各版本注册表参数
- 1008. Elevator (20)
- 35. Search Insert Position