Java虚拟机学习笔记1-运行时数据区域

 

一. 程序计数器(Program Counter Register) 


    作用:当前线程执行的字节码的行号指示器。
    1. 程序计数器帮助线程运行切换后能恢复到正确的执行位置,每个线程都有自己独立的程序计数器,各线程之间计数器互不影响、独立存储,属于“线程私有”的内存。
    2. 执行Java方法时,记录的是正在执行的虚拟机字节码指令的地址;执行Native方法时,计数器值为空(Undefined)
    3. 程序计数器是唯一一个Java虚拟机规范中未规定任何OutOfMemoryError情况的区域。

二. java虚拟机栈(Java Virtual Machine Stack)

    作用:Java方法执行的线程内存模型,用于存储局部变量表、操作数栈、动态链接、方法出口等信息
    1. 局部变量表存放编译器可知的基本数据类型、对象引用。
    2. 局部变量表所需的内存空间在编译期间完成分配,进入方法时,局部变量空间时完全确定的,不会在运行期间改变。
    3. 线程请求的栈深度大于虚拟机所允许的深度,抛出StackOverflowError异常。
    4. 栈扩展时无法申请到足够内存抛出OutOfMemoryError异常。

三. 本地方法栈(Native Method Stacks)

    1. 与虚拟机栈发挥作用相似,区别时虚拟机栈为虚拟机执行Java方法服务,本地方法栈为Native方法服务。
    2. Nativefangf栈对使用的语言、方式、数据结构没有任何强制规定。
    3. 在栈深度或栈扩展失败时抛出StackOverflowError和OutOfMemoryError异常。


四. 堆(Java Heap, GC堆 Garbage Collected Heap)

    1. 堆是线程共享的一块内存区,用于存放对象实例。
    2. 在虚拟机启动时创建。
    3. 所有对象实例以及数组都应当在堆上分配。
    4. 线程私有分配缓冲区 Thread Local Allocation Buffer TLAB  为提供对象分配效率,在堆上可以划分出多个线程私有的TLAB。
    5. Java堆物理上可以不是连续内存,逻辑上视为连续的。
    6. 主流Java虚拟机堆是可扩展的(Xmx, Xms设定), 无法扩展时抛出OutOfMemoryError异常。

五. 方法区 Method Area

 作用:用于存放被虚拟机加在的类型信息、常量、静态变量、即时编译器编译后的代码缓存数据。
    1. 方法区不同于永久代,永久代已在JDK8之后完全废弃,改用元空间代替。
    2. 垃圾收集行为在方法区是比较少出现的,主要针对的常量池的回收和堆类型的卸载。
    3. 无法满足新的内存分配时,抛出OutOfMemoryError异常。


六. 运行时常量池 Runtime Constant Pool

    1. 是方法区的一部分,用于存放Class文件编译器生成的各种字面量与符合引用。在类加载后存放在常量池
    2. 运行时常量池相对于 Class文件常量池的区别时具有 动态性,运行期间也可以将新的常量放入池中,比如常用的String类的intern()方法。
    3. 无法申请内存时抛出OutOfMemoryError异常

七. 直接内存 Direct Memory

    1. 定义:并非虚拟机运行时数据区的一部分 JDK1.4后通过通道Channel与缓冲区Buffer的I/O方式,可以使用Native方法直接分配堆外内存,然后通过对立面的DirectByteBuffer对象作为这块内存的引用进行操作。
    2. 不收堆大小的限制,受本机总内存以及处理器寻址空间限制。

整理:

线程私有空间
    程序计数器
    Java虚拟机栈
    本地方法栈

线程共享内存区
    堆
    方法区

参考《深入理解Java虚拟机》一书 2.2章节

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值