java虚拟机 内存概念

来源:互联网 发布:微信发淘宝店铺链接 编辑:程序博客网 时间:2024/06/05 00:22
一.运行时数据区:方法区,堆,java栈,PC寄存器,本地方法栈;


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
子句。
0 0
原创粉丝点击