java - C/Java 中的堆栈与堆

标签 java c heap-memory stack-memory

这是我的理解。

在 C 编程中,如果我执行 int a 那么 a 是在堆栈上创建的,因此内存是从堆栈中获取的。堆在这里不起作用。

但是如果我做类似的事情

int *a;
a=(int*)malloc(sizeof(int));

然后动态分配内存,那么引用变量会被放到栈上,但是它指向的内存会在堆上。

我的理解正确吗?

现在,我拿起这本关于 java 的书,上面写着

Whenever you need an object, you simply write the code to create it by using new, and the storage is allocated on the heap when that code is executed.

那么在 Java 中没有办法在 Stack 上创建对象吗?

我想,原始数据类型仍然可以放在堆栈上,但我关心的是对象。

最佳答案

在 Java 中无法在堆栈上创建对象。 Java 也有自动垃圾收集,所以你没有办法删除对象。您只需让对它们的所有引用都超出范围,最终垃圾收集器会处理它们。

关于java - C/Java 中的堆栈与堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17535436/

相关文章:

java - 将ejb代码更改为EntityManager代码

java - 如何正确使用 DateTimeFormatter 将其传递到存储库以执行查询?

c - 如何在C中返回指向数组的指针?

c - 打印出字符串的整数表示时 Scanf 和 strtol 的属性

c++ - c/c++有延时功能吗?

c++,在堆上创建的对象与本地创建的对象-返回指针时

Java Swing - 如何在Jpanel的北部添加图像

java - 删除目录时遇到问题,Java

java - 如何处理java.lang.OutOfMemoryError : Java heap space error on Google App Engine?

java - 使用 log4j 显示响应的堆内存问题