zoukankan      html  css  js  c++  java
  • Java运行时的数据区域

    1、程序计数器

    1、什么是程序计数器

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

    2、特点

    线程私有:每个线程都有一个独立的程序计数器,互不影响,独立存储,便于线程的切换

    3、工作机制

    所属的线程执行Java方法:记录虚拟机字节码指令地址

    所属线程执行native方法为空

    4、异常

    不存在内存溢出等异常,例如outofMemoryErrory

    2、Java虚拟机栈

    1、什么是Java虚拟机栈

    Java方法执行的内存模型

    2、特点

    线程私有:每个线程都有一个Java虚拟机栈,线程结束,栈帧也结束

    3、工作机制

    当Java方法被执行的时候会创建一个栈帧,存储了局部变量表、操作栈、动态连接、方法出口等消息。方法开始执行该栈帧入栈、方法结束该栈帧出栈。

    4、补充

    1、局部变量表:基本数据类型、对象引用类型、returnAddress类型

    基本数据类型:Boolean(1)、byte(1)、char(1)、short(1)、int(1)、float(1)、long(2)、double(2)---占用的局部变量空间

    对象引用类型:reference类型,指向对象起始地址的引用指针代表对象的句柄表示对象相关的位置

    returnAddress:指向一条字节码指令的位置

    2、局部变量表在编译期完成分配局部变量空间。运行期间不会再改变

    3、两种异常:

    stackOverflowError:线程请求的栈深度大于虚拟机所允许的深度

    OutOfMemoryError:线程请求的深度超过了虚拟机动态扩展的深度

    3、本地方法栈

    1、什么是本地方法栈

    Java native方法执行的内存模型

    2、特点

    同Java虚拟机栈

    3、运行机制

    同Java虚拟机栈(注意这里的本地方法栈仍然会抛出stackOverflowError、OutOfMemoryError两种异常。只是程序计数器不会抛出OutOfMemoryError异常

    总结:程序计数器、Java虚拟机栈、native虚拟机栈随线程而生,随线程而灭

    4、Java堆

    1、什么是Java堆

    是Java虚拟机中存放对象实例的一块最大的内存区域。也是垃圾收集器管理的主要区域。

    2、特点

    • 所有线程共享
    • 物理不连续、逻辑连续

    3、运行机制

    在Java虚拟机启动时创建,为所有的对象实例分配内存。当堆的内存无法完成实例分配的时候,会抛出OutofMemory异常。线程结束回收内存。

    5、方法区

    1、什么是方法区

    存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码数据。

    2、特点

    • 所有线程共享
    • 属于堆的一个逻辑部分
    • 不需要连续的内存空间
    • 同样也需要实现垃圾收集(虽然大家都把方法区当成了“永久代”)

    3、运行机制

    主要针对常量池的回收以及类型的卸载,无法满足内存分配需求时,抛出outofmemory异常

    6、运行时常量池

    1、什么是运行时常量池

    存放编译期生成的各种字面量和符号引用。是方法区的一部分

    2、特点

    • 存储没有任何规范,不同的提供商可以自定义
    • 动态性:运行期间还可以添加新的常量池

    3、运行机制

    类被加载时生成的字面量和符号引用存放在方法区的运行时常量池,超过内存的限制,抛出outofmemory异常

    7、直接内存

    1、什么是直接内存

    native函数直接分配的堆外内存

    2、特点

    • 不属于虚拟机运行时数据区
    • 不属于Java虚拟机的内存区域
    • 不受Java堆大小的限制
    • 本机总内存的限制

    3、运行机制

    通过channel-buffer的I/O方式,利用Java堆的directbytebuffer作为直接内存的引用。当本机总内存大于本机物理内存,会抛出outofmemory异常

    欢迎关注我的公众号:小秋的博客 CSDN博客:https://blog.csdn.net/xiaoqiu_cr github:https://github.com/crr121 联系邮箱:rongchen633@gmail.com 有什么问题可以给我留言噢~
  • 相关阅读:
    PAT 甲级 1126 Eulerian Path (25 分)
    PAT 甲级 1126 Eulerian Path (25 分)
    PAT 甲级 1125 Chain the Ropes (25 分)
    PAT 甲级 1125 Chain the Ropes (25 分)
    PAT 甲级 1124 Raffle for Weibo Followers (20 分)
    PAT 甲级 1124 Raffle for Weibo Followers (20 分)
    PAT 甲级 1131 Subway Map (30 分)
    PAT 甲级 1131 Subway Map (30 分)
    AcWing 906. 区间分组 区间贪心
    AcWing 907. 区间覆盖 区间贪心
  • 原文地址:https://www.cnblogs.com/flyingcr/p/10326899.html
Copyright © 2011-2022 走看看