JVM学习---Java运行时数据
来源:互联网 发布:python界面开发 实例 编辑:程序博客网 时间:2024/06/05 19:40
(图来自网络)
1.程序计数器
线程私有----各条线程间独立存储,互不影响。
2.Java虚拟机栈(Stack)
常说的“栈内存”,虚拟机栈中局部变量表部分。局部变量表存放了编译期可知的8大基本数据类型、对象引用、returnAdress(指向了一条字节码指令的地址)。
double、long 64位,会占用2个局部变量空间(Slot),其余数据类型只占用1个。
局部变量表的内存空间分配在编译期完成。
线程私有。
有两种异常:StackOverflowError(线程请求的栈深度大于虚拟机允许的深度),OutOfMemoryError(扩展时无法申请到足够的内存)
PS:就是常理解的,栈中存放局部变量。
3.本地方法栈
为虚拟机使用的Native方法服务。
有的虚拟机将其与java虚拟机栈合并-----Sun HotSpot
4.Java堆(Heap)
所有线程共享的一块内存区域。
存放对象实例、数组。
5.方法区(Method Area,Non-Heap)
存储已经被虚拟机加载的信息:类信息、常量、静态变量、即时编译器编译后的代码 等。
各个线程共享的内存区域。
*运行时常量池(方法区的一部分)
编译期生成的各种字面量和符号引用
JVM 每遇到一个线程,就为其分配一个 Program Counter Register(程序计数器) , VM Stack(虚拟机栈)和Native Method Stack (本地方法栈), 当线程终止时,三者(虚拟机栈,本地方法栈和程序计数器)所占用的内存空间也会被释放掉。这也是把内存区域分为线程共享和非线程共享的原因,非线程共享的那三个区域的生命周期与所属线程相同,而线程共享的区域与JAVA程序运行的生命周期相同,所以这也是系统垃圾回收的场所只发生在线程共享的区域(实际上对大部分虚拟机来说只发生在Heap上)的原因。
- JVM学习---Java运行时数据
- java--jvm--jvm运行时数据区
- JVM学习笔记--Java运行时数据区域
- JVM学习笔记--Java运行时数据区
- JVM学习03:运行时数据区域-JAVA虚拟机栈
- JVM学习04:运行时数据区域-JAVA堆
- JAVA jvm 学习(一).运行时数据区
- JVM学习笔记-运行时数据区域
- 学习JVM-运行时数据区
- JVM学习之运行时数据区域
- jvm学习笔记--运行时数据区域
- java JVM 运行时数据区
- java JVM 运行时数据区
- JAVA程序员养成计划之JVM学习笔记(1)-运行时数据区
- 《深入理解Java虚拟机》学习笔记--JVM运行时数据区
- 《深入理解 Java 虚拟机》学习笔记(1)—— JVM 运行时数据区
- JVM学习笔记——运行时数据区
- JVM学习笔记之运行时数据区
- EffectiveJava-1.考虑使用静态工厂方法替代构造方法
- zTree使用本地json数据如何确定父子节点关系
- uboot的两种command执行方式
- 统计1到n之间的所有数字中1出现的个数
- Python数据分析库pandas基本操作
- JVM学习---Java运行时数据
- 获取类加载的路径
- vector容器用法详解
- php文件操作
- SQL 删除重复记录,并保留其中一条
- php中使用date函数的问题
- appium的source返回的xml字符串处理的工具函数
- 进程和线程的区别
- TypeScript笔记 5--变量声明(解构和展开)