繁体   English   中英

java类住在哪里?

[英]Where do java class live?

我知道Java对象,实例变量已创建并存在于堆中,而局部变量和对象引用已创建并存在于堆栈中。

那么“阶级”本身在哪里生活呢?

我之所以这样问是因为,当您创建静态变量时,会使用类名来调用它们,例如

Math.round()

创建Math类时,它在内存中的位置(堆或堆栈)

迦特

堆的Permgen(永久代)区域...

Java类位于Permanent Generation heap 。内部字符串池也存储在此处。

永久世代堆包含:

  • 类的方法(包括字节码)
  • 类的名称(在永久代中也以指向字符串的对象的形式)
  • 常量池信息(从类文件中读取数据,有关所有详细信息,请参阅JVM规范的第4章)。
  • 与类关联的对象数组和类型数组(例如,包含对方法的引用的对象数组)。
  • JVM创建的内部对象(例如,java / lang / Object或java / lang / exception)
  • 编译器(JIT)用于优化的信息

类在PermGen空间(即堆)中加载

所有类都加载在PermGen空间中

您可以在此处阅读有关永久代(存储类,方法等的更多信息)的更多信息:

http://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation

但是请注意,当您调用静态方法时,Java实际上是在幕后创建对象的内部实例,因此您实际上是在对象的“幕后”全局实例上调用该方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM