首页天道酬勤静态局部变量存储在哪里,c语言静态变量存储在哪个区

静态局部变量存储在哪里,c语言静态变量存储在哪个区

张世龙 05-06 03:26 9次浏览

小典典

静态方法(实际上是所有方法)和静态变量存储在PermGen堆的一部分中,因为它们是反射数据(与类相关的数据而不是与实例相关的数据)的一部分。

更新说明:

请注意,PermGen空间中仅存储变量及其技术值(原始值或参考)。

如果您的静态变量是对对象的引用,则对象本身存储在堆的常规部分(青年/上一代或幸存者空间)。 这些对象不会存储在PermGen空间中,除非它们是内部对象,如类。

示例:

静态输入I=1; //the value1isstoredinthepermgensection

静态对象o=new some object (; //the参考(pointer/memory address ) is stored in the PermGen section,the object itself is not。

关于垃圾回收的一句话:

不依赖finalize (),或者因为它不能保证运行。 即使对象符合垃圾回收条件,JVM也可以完全确定何时运行垃圾回收器以及收集什么。

当然,可以将静态变量设置为null,以删除对堆中对象的引用,但不意味着垃圾收集器会收集它们。

另外,finalize ()只执行一次,所以必须避免引起异常。 否则,将阻止收集对象。 如果在任何异常暂停中完成,则不会再次在同一对象上调用finalize ()。

最后需要注意的是,代码的存储方法、运行时数据等因使用的JVM而异。 这意味着HotSpot可能与JRockit不同,也可能在同一JVM版本之间不同。 以上内容基于Java 5和6的HotSpot。 基本上一样。 回答时,几乎所有人都说正在使用这些JVM。 由于Java 8的内存模型发生了重大更改,因此上述说明可能不适用于Java 8 HotSpot。 另外,由于没有检查Java 7 HotSpot的变更,所以我认为上述内容也适用于此版本,但这里不确定。

2020-03-06

java静态方法存储在哪里,常量存放在哪个区