• 深入理解java虚拟机(1)


    java内存区域

    Java虚拟机执行java程序时会将管理的内存划分为若干个区域:

      1. 程序计数器

        程序计数器是一个”线程私有“的内存区域,用于获取下一条需要执行的字节码指令,如分支、循环、跳转等。

      2. Java虚拟栈

        在Java内存划分的时候,经常会听到将其分为”堆内存“和”栈内存“,这种分法中的”栈内存“就是指Java虚拟栈,更具体点就是Java虚拟栈中的局部变量表部分。——局部变量表存放的是java基本数据类型(如boolean、int等)、对象引用(reference类型,可能是对象起始地址的引用指针、代表对象的句柄或者其他与此对象相关的位置)和returnAddress类型(指向一条字节码指令的地址)。

        Java虚拟栈同样也是”线程私有“的内存区域,各个线程互不影响。

      3. 本地方法栈

        该区域与虚拟机栈所发挥的作用非常相似,只是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则为使用到的本地操作系统(Native)方法服务。

      4. Java堆

        Java堆是虚拟机管理的内存中最大的一块,它是被所有线程共享的一块区域,用于存放对象实例,是GC回收的主要区域。

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

      5. 方法区

        方法区也是各个线程共享的内存区域,用于存放被虚拟机加载的类信息、常量、静态变量、及时编译器编译后的代码等数据。——在jdk1.7之后,字符串常量重新被移到了堆中。

      6. 运行时常量池

        运行时常量池属于方法区的一部分,用于存放编译期生成的各种字面量和符号引用。——常量不一定只有运行时才会产生,运行期间也可以放入新的常量,例如String.intern()方法。

  • 相关阅读:
    数据结构之栈和队列
    数据结构之线性表
    关于优惠券优惠的思路以及实践
    mysql基础知识扫盲
    rabbitMQ第五篇:Spring集成RabbitMQ
    rabbitMQ第四篇:远程调用
    rabbitMQ第三篇:采用不同的交换机规则
    rabbitMQ第二篇:java简单的实现RabbitMQ
    rabbitMQ第一篇:rabbitMQ的安装和配置
    java容器详细解析
  • 原文地址:https://www.cnblogs.com/oeleven/p/10301307.html
Copyright © 2020-2023  润新知