java 静态变量 存储_Java中存储的静态方法和静态变量在哪里?
静态方法(实际上所有方法)以及静态变量都存储在PermGen部分,因为它们是反射数据的一部分(类相关数据,而不是与实例相关的)。
需要澄清的最新情况:
注意,只有变量及其技术值(原语或引用)存储在PermGen空间中。
如果静态变量是对象的引用,则该对象本身存储在堆的正常部分(年轻/旧代或幸存者空间)。这些对象(除非它们是类等内部对象)是不存储在PermGen空间。
例子:static int i = 1; //the value 1 is stored in the PermGen sectionstatic 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的不同版本之间也可能有所不同。上面的内容是基于HotsforJava 5和6的(它们基本上是相同的),因为在回答时,我想说大多数人都使用这些JVM。由于Java 8时内存模型发生了重大变化,上述语句可能不适用于Java 8 HotSpot-而且我没有检查Java 7 HotSpot的更改,所以我猜以上对于那个版本仍然是正确的,但我在这里不确定。
java 静态变量 存储_Java中存储的静态方法和静态变量在哪里?相关推荐
- java 的方法是静态的类_Java中单例模式和静态方法类的区别
最近翻看了一些资料,发现JAVA的单例模式并不简单:PHP并没有线程安全的问题,一个请求在结束后生命周期就结束了,PHP设计单例模式仅仅是为了如果在同一个页面多次处理,可以不用重复创建对象而已:JAV ...
- java重新初始化吗_Java中为何已经重新赋值的变量在输出后会初始化?
/*这是代码先定义变量用switch选择结构重新赋值后输出的变量却初始化了...*/importjava.util.Scanner;publicclass练习3{publicstaticvoidmai ...
- 不同类型的变量在内存中存储的详细情况
原文链接:http://blog.csdn.net/qingkong8832/article/details/6687793 一.int型变量在内存中存储详细情况 //By Richard #incl ...
- java 数据保存内存_java中的各种数据类型在内存中存储的方式 一
1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对 ...
- java静态变量特点_Java中static的特点
前两天面试时被问到静态的特点,当时回答地不是很好,现在来总结一下 在了解某样东西的时候我们通常会从它是什么,为什么,和怎么样在三方面来衡量,对于java中的static,我们也这样讨论下,要明确以下几 ...
- java中参数存储_Java中函数参数传递和数据存储
值传递是将要传递的值作为一副本传递的.. 引用传递,传递的是引用对象的内存地址.. 例如: int i=4; int j=i; //相当于把4复制了一个副本赋给了j 输出结果是i=4 ,j=4 C ...
- java string 对象地址_Java中String对象的存储位置(学习笔记)
packagetest.string.equal;public classMain {/*** 创建了三个对象,"helloworld对象创建在常量池中",每次new String ...
- java子类代码块_java中父类子类静态代码块、构造代码块执行顺序
父类静态(代码块,变量赋值二者按顺序执行) 子类静态 父类构造代码块 父类构造方法 子类构造代码块 子类构造方法 普通方法在实列调用的时候执行,肯定位于上面之后了 //父类A public class ...
- java的静态如何理解_java中的静态是什么?如何理解?
在Java语言中,static表示"静态"的意思,使用场景可以用来修饰成员变量和成员方法,当然也可以是静态代码块.static的主要作用在于创建独立于具体对象的域变量或者方法. 格 ...
最新文章
- JavaWeb总结(九)
- AndroidStudio中使用XML和Java代码混合控制UI界面实现QQ相册照片列表页面
- POJ 3974 Palindrome (算竞进阶习题)
- OJ4008-糖果【各种dp之3】
- Java进阶之对象克隆(复制)
- zsh: command not found: service
- 【发现问题】Java中PrintWriter和BufferedWriter的区别
- Win10显示多个虚拟桌面
- 越狱团队否认收钱并中止与太极合作
- 常见的主流数据库(DBMS)
- MySQL数据操作与查询笔记 • 【第6章 聚合函数和分组查询】
- zTree插件setting配置详解
- 可以免费自学编程的12个网站
- 4D-Net for Learned Multi-Modal Alignment 论文笔记
- PhysX官方手册翻译
- k-means用于图像的颜色聚类
- 家庭财务管理系统(C++面向对象课程设计附课设报告)
- Linux系统下安装alsa-lib-1.1.8
- 数字加减与摄氏华氏度转化 王明哲
- Linux 中查看网卡是否启用