JVM Knowledges-运行时数据区

Runtime Data Area
 

方法区

JavaHeap

JavaStack

程序计数器

本地方法区

存储数据

用于存储已被虚拟机加载的类信息,常量,静态变量,即使编译器编译后的代码等数据

所有的对象实例以及数组都要在堆上分配

虚拟机栈描述的是Java方法执行的内存模型

当前线程所执行的字节码的行号指示器

JavaStack类似,为虚拟机使用的Native方法服务。

生命周期

Jvm启动时创建

JVM

1.同线程的创建创建

2.同线程的结束而结束

同线程

同线程

共享

所有线程

所有线程

线程私有

线程私有

线程私有

使用异常

OutOfMemoryError

OutOfMemoryError

StackOverflowErro

OutOfMemoryError

StackOverflowError

OutOfMemoryError

其他

1.可以选择不实现垃圾收集。

2.方法区可以处在物理上不连续的内存空间上,只要逻辑上连续即可。

3.垃圾收集行为在这个区域比较少见。

4.这个区的内存回收目标主要针对常量池的回收,对类型的卸载。

5.RuntimeConstant Pool是方法区的一部分

a.用于存储编译期生成的各种字面量和符号引用。

b.运行时常量池相对于Class文件常量池的另外一个作用是具备动态性。Java语言并不要求常量一定只能在编译期间产生。

c.运行期间也可以将新的常量放入池中。如String类的intern()方法。

1.Java堆是垃圾收集器管理的主要区域

2.Java堆还可以细分为新生代,老年代。

3.Java堆可以处在物理上不连续的内存空间上,只要逻辑上连续即可。

1.StackFrame:每个方法被执行的时候会同时创建一个StackFrame.
2.StackFrame用来存储局部变量表,操作数栈,动态链接,方法出口等信息。
3.每个方法被调用直至执行完成都对应一个StackFrame从出栈到入栈的过程
4.局部变量表所需要的空间在编译期间完成分配,当进入一个方法,这个方法需要在栈中分配多大的局部变量空间是完全确定的,方法运行期间不会改变局部变量的大小
1.正在执行的是native方法,则这个计数器则为空.
2.如果正在执行的是java方法,这个计数器记录的是正在执行的虚拟机虚拟机字节码指令地址。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值