qq_56876713 2022-08-09 09:54 采纳率: 60%
浏览 40
已结题

为什么Java7及之后的Hospot虚拟机选择将静态变量放在堆中去实现?这不是违背规范了吗

Java7之后的虚拟机规范,也是说方法区存储的是类的字段等信息,为什么Java7及之后的Hospot虚拟机选择将静态变量放在堆中去实现?这不是违背规范了吗?

img

img

  • 写回答

2条回答 默认 最新

  • CSDN专家-sinJack 2022-08-09 10:18
    关注

    Java虚拟机规范只是一个规范类似于接口 hotsot是具体实现 具体实现和规范有点差异性是很正常的
    堆区:

    1、存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)

    2、jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身

    栈区:

    1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中

    2、每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。

    3、栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。、

    方法区:
    1、又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。

    2、方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月19日
  • 已采纳回答 8月11日
  • 创建了问题 8月9日