中易网

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

答案:1  悬赏:40  
解决时间 2021-03-23 23:28
java里的静态变量是放在了堆内存还是栈内存
最佳答案
堆区:
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的对象。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
前女友和我说你吻我是因为你寂寞,我不反抗是
我在公司做了二个,现得了颈椎病,我可以向公
三星旗下几个液晶电视的品牌
我是高三毕业生在菏泽一中上的。但是今年高考
孕妇是可以吃火锅的吗,对宝宝会有影响吗?
我在京东看了韩束的,想买,就是不知道是不是
第一次见男友家长
怎么可以永久去腿毛,谁有好办法?
黔西南州(兴义市)新修的水文局,地址是叫什
汽车发电机皮带老掉和车速有关系吗
什么是招标告示
bt彗星下载资源很多却没速度
一个正方形的棱长扩大到原来的2倍棱长的和扩
钻孔灌注桩冲击锤有哪些类型
广州市增城区开创大道铺南路附近有哪些物流公
推荐资讯
欧神诺陶瓷怎么样?属于什么档次呢?
古诗中山鬼是什么意思
复读好吗?高四和高三有什么区别吗?
未婚者廉租房申请书怎么写
货物签收单可以补签吗
u盘打开后,显示“请将磁盘插入驱动器”,有
HTML里面的问题
问问老师我的命怎么样啊,今年是不是走劫财运
怎么吃也长不胖是为什么
什么样的婚姻生活才是幸福的
老亭子面馆地址在什么地方,想过去办事
男朋友说同情一个女孩,怕伤害她
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?