jvm内存

来源:互联网 发布:andreja pejic 知乎 编辑:程序博客网 时间:2024/05/22 01:26
所想:
加上static关键字后成员变量、成员方法在内存中变化?
对象实例化时对于类的成员变量和成员方法,堆中会产生哪些东西?
方法进栈过程?


【存的是什么东西?】
jvm内存中堆和方法区是共享的,而栈、本地方法区、寄存器是每个线程单独的。
1.Heap 分配内存来保存对象实例
  实际有实例对象的属性值、属性类型、实例对象本身的类型的标记。
  以上分配完成后要在Stack中,保存占4Byte的实例对象的Heap内存地址。
2.方法区:
  类定义数据、常量、静态变量、字节码
  1)常量池RCP(Runtime Constant Pool)存编译器产生的字面量和符号引用,也可存运行时产生的新常量。
  2)静态域
  ...
--
1.vm stack 提供java方法服务
  stack frame 是有关方法和运行期数据的数据集,当方法被调用就产生一个stack frame并压栈,先进后出。
  包含:局部变量表、操作栈、动态链接、方法出口,其中局部变量表:基本类型、引用指针或句柄。
  Method Index \ Parameters \ Local vars \ Class File \ Return Frame \ Next Frame..
2.native method stack 提供native方法服务
3.寄存器指示当前类字节码位置
  完成分支、循环、跳转、异常、恢复等功能。


【怎么运行起来?】
实例化对象会在堆创建实例也会在栈产生引用
1.方法进栈后会在栈中为局部变量分配内存,如果是个基本类型就存它的值,是个引用类型就存地址值。
2.执行某个带参数的方法,方法进栈后会为型参分配内存,情况考虑如同局部变量。

3.栈中的局部变量随方法弹线而销毁。


http://www.cnblogs.com/wangjzh/p/5258254.html

原创粉丝点击