java 静态变量 存储_java中,类的静态变量如果是对象,该对象将存储在内存的哪个区域?…

java 静态变量 存储_java中,类的静态变量如果是对象,该对象将存储在内存的哪个区域?…静态变量所引用的实例位于Java堆或运行时常量池。Java字节码与Native机器码不同,字节码是运行在JVM这一平台上的,字节码在被解释的过程中,具体的执行方式因JVM的不同实现而不同,但是对于JVM来说,它的各种不同实现都必须要遵循Java虚拟机规范。JVM的运行时数据区包含以下部分:1、PC寄存器每一条Java虚拟机线程都有自己的PC寄存器,如果正在被线程执行的当前方法不是native的,那…

大家好,又见面了,我是你们的朋友全栈君。

静态变量所引用的实例位于Java堆或运行时常量池。

Java字节码与Native机器码不同,字节码是运行在JVM这一平台上的,字节码在被解释的过程中,具体的执行方式因JVM的不同实现而不同,但是对于JVM来说,它的各种不同实现都必须要遵循Java虚拟机规范。JVM的运行时数据区包含以下部分:

1、PC寄存器

每一条Java虚拟机线程都有自己的PC寄存器,如果正在被线程执行的当前方法不是native的,那么PC寄存器就保存Java虚拟机正在执行的字节码指令的地址。

2、Java虚拟机栈

每一条Java虚拟机线程都有自己私有的Java虚拟机栈,这个栈与线程同时创建,用于存储栈帧,栈帧可以在堆中分配,Java虚拟机栈所使用的内存不需要保证是连续的。

3、Java堆

在Java虚拟机中,堆是可供各个线程共享的运行时内存区域,也是供所有类实例和数组对象分配内存的区域,存储了被垃圾收集器所管理的各种对象。

4、方法区

在Java虚拟机中,方法区是可供各个线程共享的运行时内存区域,它存储了每一个类的结构信息。虽然方法区是堆的逻辑组成部分,但是简单的虚拟机实现可以选择在这个区域不实现垃圾收集与压缩。从Java6至Java14的虚拟机规范中,都没有限定实现方法区的内存位置和编译代码的管理策略。比如在HotSpot曾经的实现中,它内部的垃圾收集器全都基于“经典分代”来设计,将堆内存划分为新生代、老年代、永久代,其中永久代便是包括类型信息、常量、静态变量、JIT代码缓存等数据的方法区,而到了Java8,HotSpot已经完全废弃了永久代的概念,改用本地内存中实现的元空间来代替。

5、运行时常量池

运行时常量池的功能类似于ELF中的符号表,但是运行时常量池的包含的范围比典型的符号表大。一般来说,除了保存class文件中描述的符号引用外,还会把由符号引用翻译出来的直接引用也存储在运行时常量池中。相对于Class文件常量池来说,运行时常量池具备一个重要特性——动态性,并非预置入Class文件中常量池的内容才能进入运行时常量池,运行期间也可以将新的常量放入池中,比如String的intern方法。

6、本地方法栈

为虚拟机使用到的本地方法服务,具体的虚拟机可以根据需要自由实现它。

根据Java虚拟机规范的限制,由于静态变量所引用的实例可以被各个线程所共享,那么它一定不能位于PC寄存器、Java虚拟机栈、本地方法栈,又由于方法区存储的是类的结构信息而不是实例数据,所以被静态变量所引用的实例一定位于Java堆或运行时常量池。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/130585.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 51单片机按键控制步进电机加减速及正反转

    51单片机按键控制步进电机加减速及正反转之前尝试用单片机控制42步进电机正反转,电机连接导轨实现滑台前进后退,在这里分享一下测试程序及接线图,程序部分参考网上找到的,已经实际测试过,可以实现控制功能。所用硬件:步进电机及驱动器、STC89C52单片机、直流电源1、硬件连接图注意:上图为共阳极接法,实际连接参考总体线路连接。 驱动器信号端定义:PUL+:脉冲信号输入正。(C…

  • ubuntu 安装apt_Unable to locate package vim

    ubuntu 安装apt_Unable to locate package vimubuntu通过apt命令快速安装指定版本的nginx先安装nginx依赖的第三方包sudoaptinstallcurlgnupg2ca-certificateslsb-release添加nginx官方的ubuntu的apt源echo”debhttp://nginx.org/packages/ubuntu`lsb_release-cs`nginx”\|sudotee/etc/apt/sources.list.d/nginx.list新增

  • Python 打包成mac app

    Python打包成macapp一、创建一个简单的Tkinter应用,并命名为Sandwich.py:importsysifsys.version_info  #Python2  importTkinterastkelse:  #Python3  importtkinterast

  • WEB框架本质和第一个Django实例

    Web框架本质我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。这样我们就可以自己实现Web框架了。半成品自定义web框架可以说We

  • sourceinsight4.0序列号_source insight 4

    sourceinsight4.0序列号_source insight 4先关闭Souceinsight。打开C:\ProgramData\SourceInsight\4.0\si4.lic将Date和Expiration都加一年(比今年多一年即可),保存。重新打开Souceinsight,会提示重新输入用户名和邮箱,继续试用30days。

  • 穷举暴力激活成功教程密码(真香版)

    穷举暴力激活成功教程密码(真香版)最近没事干,本来是准备激活成功教程邻居家WiFi密码的,后来发现太慢了,要加载好久,所以自己做了个测试机。下面是激活成功教程器源码:#include<windows.h>#include<iostream>#include<cstdio>#include<conio.h>usingnamespacestd;voiddown(chara){ keybd_event(a,(BYTE)0,0,0); keybd_event(a,(BYTE)0,

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号