Java运行时数据区

Java运行时数据区

1.程序计数器:是一块较小的的内存空间,是当前程序所执行的字节码的行号指示器。字节码解释器的工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理

2.Java虚拟机栈:每个方法在执行时都会创建一个帧栈,用于存储局部变量表,操作数栈,动态链接方法出口等。

3.本地方法栈:与虚拟机栈比较相似,主要为虚拟机使用到的native方法服务。

4.java堆:此区主要用于存储对象。java虚拟机规范中说,所有对象示例以及数组都要在堆上分配,但是随着JIT编译器的发展与逃逸技术的逐渐成熟,栈上分配,标量替换等,不是所有的对象都在堆上分配 。 

5.方法区,与堆一样,是线程共享的内存区域,用于存储被虚拟机加载的类信息,常量,静态变量,即时编译后的代码等数据。对于HotSpot来说也叫永久带。

6.运行时常量池:是方法区的一部分。class文件除了有类的版本,字段,方法,接口等描述信息外,还有一项信息是常量池,用于存放编译期间生成的各种字面量和符号引用。注意:String的intern()方法(intern用来返回常量池中的某字符串,如果常量池中已经存在该字符串,则直接返回常量池中该对象的引用。否则,在常量池中加入该对象,然后返回引用)

7.直接内存

你可能感兴趣的:(Java运行时数据区)