首页 > 编程知识 正文

java如何给静态变量赋值,静态方法在内存中的什么地方

时间:2023-05-03 13:23:50 阅读:132726 作者:2741

静态方法(实际上是所有方法)和静态变量是反射数据的一部分,因此存储在PermGen部分中。 这是依赖于类而不是实例的数据。

需要澄清的最新情况:

请注意,只有变量及其技术值(参见原语或)存储在PermGen空间中。

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

示例:静态Inti=1; //the value1isstoredinthepermgensectionstaticobjecto=new some object (; //the参考(pointer/memory address ) isstoredinthePermGensection,theobjectitselfisnot。

关于垃圾收集的话:

不要依赖finalize ()。 因为不一定跑。 这完全取决于JVM何时运行垃圾收集器以及收集什么,即使一个对象满足垃圾收集条件也是如此。

当然,也可以将静态变量设置为NULL以删除对堆中对象的引用,但这不意味着垃圾收集器会收集它们(即使没有更多的引用)。

此外,finalize ()只运行一次,因此必须避免引发异常或收集对象。 如果由于某些异常而停止退出,则不会在同一对象上再次调用finalize ()。

最后一个注意事项代码、运行时数据等的存储方法因使用的JVM而异。 也就是说,HotSpot可能与JRockit不同,同一JVM的不同版本之间也可能不同。 以上内容基于HotsforJava 5和6。 这些基本上一样。 回答的时候,我想很多人都在使用这些JVM。 由于Java 8对内存模型进行了重大更改,因此上述语句可能不适用于Java8hotspot。 另外,由于没有检查Java 7 HotSpot的变更,所以上述版本也是正确的,但这里不确定。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。