对于JAVA虚拟机运行时数据区的理解

来源:互联网 发布:java动物继承例子 编辑:程序博客网 时间:2024/06/08 13:48

1.程序计数器:这个是被线程独占的一块内存区域,主要是在字节码解释器中执行吓一条指令的地址,特别是在多线程的情况下,由于是采用时间片轮换的机制实现线程切换(特特别是在单核处理下),需要保留现场,,当cpu处理完其他请求,会根据程序计数器继续执行。

2.JAVA虚拟机栈:这个也是被线程独占的一块内存区域,主要存储局部变量表,操作数栈,动态链接,方法出口等信息,,局部变量表存放了编译期可知的各种基本数据类型以及对象的引用。

3.本地方法区:和JAVA虚拟机栈差不多,不同的市JAVA虚拟机栈为为虚拟机执行java方法服务,而本地方法栈则为虚拟机用到的Native方法服务

4.JAVA堆:事所有线程共享的一块区域,主要为创建对象的实例,事垃圾收集器的主要区域,也叫做GC堆,当前的虚拟机基本上都是可扩展的(-Xmx,-Xms控制,两者相等,则固定不变)

5.方法区:我对于方法区的理解不是很清除,,HotSpot是把它当成与堆平齐的一块区域,,也叫做永久代,主要存储编译过的类信息,静态变量,常量,即时编译器编译后的代码等等

6.运行时常量池:事方法区的一部分,用于存放编译期生成的各种自变量和符号引用

7.直接存储:使用Native函数库直接分配堆外内存



1 0