首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中的堆与堆栈内存

java中的堆与堆栈内存
EN

Software Engineering用户
提问于 2014-10-03 12:47:17
回答 1查看 590关注 0票数 -1

我对java中的堆和堆栈内存有一些疑问。

  1. 无论是内存空间还是运行时存储数据的算法(过程)。
  2. 下面是类HeapStack { String = "test";//堆内存int a= 10;//堆内存私有空测试(){ int a= 10;//堆栈内存字符串str = "test";//堆内存}}

我说得对吗?

EN

回答 1

Software Engineering用户

发布于 2014-10-03 12:58:08

你说的有一部分是对的。Java基于指针工作,指向对象的所有变量都是指针(正式称为引用)。这些变量的内存在堆栈上分配,以防在方法中定义,如果它们是字段,则在堆上分配。数据本身的值与您定义的一样:所有对象+定义为字段的原语都在堆上,而在方法中定义的原语则在堆栈上。

在Java中,对于堆栈和堆,内存分配几乎是一样的(与C不同,C有一个更复杂的堆分配逻辑):对于堆栈来说,只是推,对于堆,有一种机制称为凸指针。最大的区别是内存回收;因为堆栈是流行的,而堆则是著名的垃圾收集器。

一个更准确的注释类是:

代码语言:javascript
复制
class HeapStack {

    String str /*heap*/ = "test"; // heap memory    
    int a /*heap*/ = 10;// heap memory

    private void Test() {    
        int a /*stack*/ = 10;// stack memory    
        String str /*stack*/ = "test";// heap memory    
    }    
}
票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/257970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档