【问题标题】:How does Java allocate memory for objects?Java如何为对象分配内存?
【发布时间】:2015-05-30 02:17:45
【问题描述】:

我一直在阅读一些 android 教程,我看到了这个:

public class HelloService extends Service {
  private Looper mServiceLooper;
  private ServiceHandler mServiceHandler;
  ...

我假设当您声明像public int num1; 这样的整数时,编译器会在看到它时立即为其分配整数大小的内存。但是它怎么能对所有对象做这样的事情呢?是否所有对象都分配了相同的内存并且更具体只是为了类型安全/可读性目的?

【问题讨论】:

  • 这些只是指向null 的指针,像这样声明它们——所有指针在内存中的“大小”都是相同的。在您执行new Looper()new ServiceHandler() 之前,您实际上不会最终分配不同大小的内存。这些与public int num1 有点不同,后者不是对象。你能把你的问题缩小一点吗?我敢肯定,对这样的事情的正确答案最终可能会成为一本书。
  • 谷歌java memory stack heap.
  • 我同意@Chris。这个想法是 Java 编译器 (javac) 为您的 Java 源代码 (.java) 生成字节码 (.class)。然后,.class 文件可以(可能)由 Java 虚拟机 (JVM) “运行”。然后类文件最初由JVM“解释”并执行字节码指令。 Java 虚拟机规范中描述了这种解释的规则。指令new 在执行时最终会为对象分配空间。

标签: java object memory


【解决方案1】:

mServiceLooper 和 mServiceHandler 字段只是指向其相应类的实例的指针。所有指针占用相同的空间,例如4 个字节,取决于 JVM。

【讨论】:

    猜你喜欢
    • 2021-07-24
    • 1970-01-01
    • 2011-03-19
    • 2012-02-28
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2019-04-15
    • 2014-03-17
    相关资源
    最近更新 更多