像C语言编程,C++不会数组值存储在堆而是保持在STACK的值。但在Java中,为什么有必要将数组值保存在堆中?为什么java中的数组值存储在堆中?
4
A
回答
16
在Java中,数组(就像所有其他对象)都通过引用传来传去:当你传递一个阵列的方法,它会得到指向内存中的相同位置的引用,没有复制,正在取得进展。这意味着数组需要在创建它的方法后保持“活动”状态,因此不能存储在方法的堆栈框架中。它需要由垃圾收集器管理,就像所有其他对象一样。
有一些研究正在使用“逃逸分析”来优化JVM内存分配:如果一个对象(如数组)可以保证永远不离开当前范围,事实上可以将其分配给堆栈,这是更高效。
6
短的回答是,在Java中的阵列是一个引用类型,和引用类型住在堆上。值得一提的是,在C#,一个可以切换到不安全模式和初始化用stackalloc阵列这将在栈上创建该阵列。因此,它是完全有可能的是,虚拟机将让你做出在栈上的数组,它只是一个实现细节,这意味着阵列都生活在堆上。
0
int[]a={10,20,30};
上stack
这个数组存储,但下面的数组存储在heap
:
`int[]num=new int num[2];`//here we build the object of array , object always located in heap
总是像对待Java对象数组,所以不要的事实,数组不存储在混淆当我们有一个像上面这样的声明时,公羊就会出现。
+0
我不认为这是正确的。你的第一个例子是新的int [] {10,20,30}的简写,我的理解是数组将被存储在堆上。 – darrenmc 2014-09-08 14:32:32
相关问题
- 1. 为什么我的输入值没有存储在数组中?
- 2. Java为什么不在循环中存储条件的值?
- 3. 为什么Java使用堆数据结构来存储对象?
- 4. 为什么基指针值存储在堆栈
- 5. 数组不存储值JAVA
- 6. 为什么BLOB值不存储在SQLite数据库中的Android
- 7. 什么数据将被存储在堆栈中在C#
- 8. 为什么在PHP中使用数组来存储login -info?
- 9. 分析java heapdumps:为什么枚举实例保存在堆中?
- 10. Java数组:找到数组中存储值的索引。是
- 11. Java表索引存储在堆中?
- 12. 为什么不能分割存储在数组中的字符串并将其放回数组中? Java
- 13. 将值存储在数组中的php
- 14. 将字符串数组的值存储在变量中的java
- 15. 将数组作为值存储在关联数组中
- 16. Java - 读取并存储在数组中
- 17. 为什么存储在数组中的值在Android中以套接字显示为空的形式传递
- 18. 为什么字符串存储在Java中的字符串池?
- 19. 在android(java)数组中获取和存储sqlite的列值
- 20. 为什么我在Java中看不到返回数组中的整数值?
- 21. 如何使用java在mySql中的表列中存储数组值的值
- 22. 为什么cookie不存储在json中?
- 23. 为什么templatetags存储在目录中?
- 24. 为什么在TensorFlow中多次存储`tf.constant()`的值?
- 25. 在结构数组中存储值
- 26. 如何在数组中存储值php
- 27. 在javascript数组中存储JSON值
- 28. 将列值存储在数组中
- 29. 如何将值存储在数组中?
- 30. 将参考值存储在数组中
为什么它怎么了你? JVM应该处理任何内存分配和释放问题。具体来说,我认为这取决于你有什么类型的数组,主要是vs对象。 – Jay 2009-12-15 14:23:26
@Jay。无论如何,它并不困扰我。但是我想知道为什么内存分配保存在堆中。这背后有什么特别的原因吗?多数民众赞成在... – i2ijeya 2009-12-16 14:46:02