微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java赋值后的内存分配

如何解决Java赋值后的内存分配

我想知道在有关变量声明和赋值的简单情况下如何分配内存。假设我们有以下内容

int a;

据我所知,一旦我们 daclare int a; 就分配了 4 个字节; .但是,当我们为 a 赋值时,内存是如何工作的呢?我想以下内容在内存方面存在差异:

a = 1; a = 1000000;

所以,实际上,问题是赋值如何影响内存。

解决方法

局部变量由编译器在方法的调用栈上分配。

void f(int a,String b) {
    String d = "";
    for (int i = 0; i < 10; ++i) {
        int c;
        c = a*i;
        d = d + b;
    }
}

堆栈:

Compiler stores frame size of `f(int,String)`: 28
fp[0] int a
fp[4] String b
fp[12] String d
fp[16] int c
fp[24] int i
fp[28]

每次通话都会发生这样的事情:

checkStackCanReserveFrameWithSize(28); // can throw OutOfMemoryException

复制的是

  • 原始类型的值,或
  • 对象的对象引用。

所以没有分配分配。

d + b 之上进行分配, String.concat(String)

  • 字段变量作为对象分配的一部分进行分配。
  • 静态字段变量(全局字段)作为类初始化分配。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。