问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java里的静态成员变量是放在了堆内存还是栈内

发布网友 发布时间:2022-03-24 22:56

我来回答

2个回答

热心网友 时间:2022-03-25 00:25

这个要看对象是否为逃逸对象,如果为非逃逸对象,会根据标量替换来把对象分解成若干个被这个方法使用的成员变量所代替,这些代替的成员变量在栈帧或寄存器上分配空间

热心网友 时间:2022-03-25 01:43

堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
程序运行时,我们最好对数据保存到什么地方做到心中有数。特别要注意的是内在的分配,有六个地方都可以保存数据:
1、 寄存器。这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。
2、 堆栈。驻留于常规RAM(随机访问存储器)区域。但可通过它的“堆栈指针”获得处理的直接支持。堆栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。创建程序时,java编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间”。这是由于它必须生成相应的代码,以便向上和向下移动指针。这一*无疑影响了程序的灵活性,所以尽管有些java数据要保存在堆栈里——特别是对象句柄,但java对象并不放到其中。
3、 堆。一种常规用途的内存池(也在RAM区域),其中保存了java对象。和堆栈不同:“内存堆”或“堆”最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new命令编制相碰的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间
4、 静态存储。这儿的“静态”是指“位于固定位置”。程序运行期间,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的。但java对象本身永远都不会置入静态存储空间。
5、 常数存储。常数值通常直接置于程序代码内部。这样做是安全的。因为它们永远都不会改变,有的常数需要严格地保护,所以可考虑将它们置入只读存储器(ROM)。
6、 非RAM存储。若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程序的控制范围之外。其中两个最主要的例子便是“流式对象”和“固定对象”。对于流式对象,对象会变成字节流,通常会发给另一台机器,而对于固定对象,对象保存在磁盘中。即使程序中止运行,它们仍可保持自己的状态不变。对于这些类型的数据存储,一个特别有用的技艺就是它们能存在于其他媒体中,一旦需要,甚至能将它们恢复成普通的、基于RAM的对象。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
华为freebuds4i切歌怎么操作_华为freebuds4i怎么切歌 华为freebuds pro切歌方法_华为freebuds pro怎么切歌 华为耳机怎么切换下一曲 欧美电影,好像是宠物有一个世界,宠物会想办法跟主人的灵魂互换占据 ...的名字,欧洲中世纪,一个王子的继母把他的灵魂和狗的灵魂互换了... 问一部外国电影的名字 剧情记得不大清楚l了 是前几年的片子 灵魂互换的... HUAWEI 华为 AGS2-W09 10.1英寸平板电脑 (香槟金、64GB+4GB、WiFi版... 诛仙3百法和千法差距大吗 微信怎么解除应用授权登录 授权应用删除方法 微信怎么解除应用授权登录授权应用删除方法 c# static变量存在哪? C++里面static申明的变量是存在哪个区(堆区、栈区、代码区,,其他2个忘了) java里的静态成员变量是放在了堆内存还是栈 在Java JVM里,如果一个变量被声明为final或者static, 那么这个变量的引用以及它的值被存放在哪? 静态局部变量存储存储在哪个区 java static变量存储在什么地方呢,别说什么静态存储池的,我需要实际和具体的回答,是内存还是缓存? 静态变量存储在哪个区 java中static变量放在哪? 函数中static变量贮存在那儿 静态变量在内存哪分配的? 静态static变量在不同的实例中地址是否一样,存储在什么区域 java静态变量存储在哪个区 java中,静态变量存储在哪个区啊,堆还是栈啊,或者说其他地方,谢谢 java中 static变量和方法到底是存在内存什么区域 static对象存在哪里 static变量到底存在什么位置 static的变量是放在哪里呢 系统还原备份与分区 备份分区表和备份分区有什么区别 装双系统时是还原分区还是备份分区求大神帮忙 vivo v3可以开空调吗?如果可以怎么弄的? amd radeon64 rx 570相当于n卡什么级别 RX570显卡怎么样 Rx570超白金相当于n卡那个卡 rx570显卡好不好 显卡RX560XT和RX570 4G有什么区别?性能差距? 两个显卡的区别 Radeon™ RX 570和GeForceR GTX 1060 电脑显卡GPU,rx570 4g 对比gtx 760 2g 和gtx 6g 1060怎么样? 请问电脑显卡rx 570 4G?比gtx 760 2g 强多少?比1060 6g 和3g 差多少? A卡RX570 4G版本性能比N卡GTX1060 6G还好吗 rx570和rx580有多大区别,玩游戏直播该选哪一个,播逆战,荒野行动 迅景rx 570显卡怎么样 radeon pro w5700x相当于n卡 gtx960显卡和rx570或者580有什么区别都是4g显存。 电脑rx570 8g和gtx1060哪个好 rx570和gtx970哪个显卡更好用 电脑显卡RX570 4G和GTX1650 4G哪个好 丽台Q5000的建模性能是RX570的多少倍 平板的mtk6797是什么,和mt6797是一个么 MT6797T10核处理器与骁龙855哪个更好些?