Java中存储的静态方法和静态变量在哪里?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java中存储的静态方法和静态变量在哪里?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1501字,纯文字阅读大概需要3分钟。
内容图文
例如:
class A {
static int i=0;
static int j;
static void method() {
// static k=0; can't use static for local variables only final is permitted
// static int L;
}
}
这些变量将存储在Java,堆中还是堆栈内存中?它们是如何存储的?
解决方法:
静态方法(实际上是所有方法)以及静态变量都存储在堆的PermGen部分中,因为它们是反射数据的一部分(类相关数据,而不是实例相关).
更新澄清:
请注意,只有变量及其技术值(基元或引用)存储在PermGen空间中.
如果静态变量是对象的引用,则对象本身存储在堆的正常部分(年轻/老一代或幸存者空间)中.这些对象(除非它们是类等内部对象)不存储在PermGen空间中.
例:
static int i = 1; //the value 1 is stored in the PermGen section
static Object o = new SomeObject(); //the reference(pointer/memory address) is stored in the PermGen section, the object itself is not.
关于垃圾收集的一个词:
不要依赖于finalize(),因为它不能保证运行.完全取决于JVM决定何时运行垃圾收集器以及收集什么,即使对象符合垃圾收集条件.
当然,您可以将静态变量设置为null,从而删除对堆上对象的引用,但这并不意味着垃圾收集器将收集它(即使没有更多引用).
另外,finalize()只运行一次,因此你必须确保它不会抛出异常或以其他方式阻止收集对象.如果通过某个异常停止终结,则不会再次在同一对象上调用finalize().
最后一点:如何存储代码,运行时数据等取决于所使用的JVM,即HotSpot可能与JRockit不同,并且这可能在同一JVM的版本之间有所不同.以上是基于HotSpot for Java 5和6(基本相同),因为在回答时我会说大多数人都使用这些JVM.由于Java 8中内存模型发生了重大变化,上面的陈述可能不适用于Java 8 HotSpot – 而且我没有检查Java 7 HotSpot的变化,所以我猜这个版本仍然适用于该版本,但我不确定这里
内容总结
以上是互联网集市为您收集整理的Java中存储的静态方法和静态变量在哪里?全部内容,希望文章能够帮你解决Java中存储的静态方法和静态变量在哪里?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。