一.运行时数据区:方法区,堆,java栈,PC寄存器,本地方法栈;
******************************************************************************************************
2.虚拟机装载class文件,从class文件解析类型信息,类型信息放到
方法区。当程序运行时,虚拟机会把所有该程序在运行时,创建的对象
都放到堆中。
3.新线程创建时,它都会得到它自己的PC寄存器以及一个java栈;
4.returnaddress 内部基本类型,我们不能调用,用来实现java程序中的finally
子句。
java栈:常用于存放对象引用和基本数据类型,而不用于存储对象;
1.一个线程一个java栈,每当线程调用一个java方法时,虚拟机都会在该线程的java
栈中压入一个新帧,而这个帧自然是当前帧。在执行这个方法时,它使用这个帧
来存储参数,局部变量,中间运算结果等等。(一旦方法运行结束,就会出栈,这些数据就都会被 回收)
堆: java 程序在运行时创建的所有类实例或数组都放在同一个堆中;java虚拟机实例只存在于一个堆空间中,因此所有线程都 共享一个堆;
方法区:1.类型信息,类数据都放在方法区;
2.该类型中的类(静态)变量同样也是存储在方法区;因为静态变量属于类,
总是作为类型信息的一部分存在于方法区;
3.线程都共享方法区;
4.方法区存在于堆中,可自由分配;(java虚拟机规范把方法区描述为堆的一个逻辑部分)
5.常量池存在于方法区;
6.编译时常量 (那些用final声明以及用编译时已知的值 初始化的类变量)的类型都 会复制它的所有常量到常量池;
编译时常量 :final static 变量名;
类型信息:
******************************************************************************************************
2.虚拟机装载class文件,从class文件解析类型信息,类型信息放到
方法区。当程序运行时,虚拟机会把所有该程序在运行时,创建的对象
都放到堆中。
3.新线程创建时,它都会得到它自己的PC寄存器以及一个java栈;
4.returnaddress 内部基本类型,我们不能调用,用来实现java程序中的finally
子句。