像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. 爲什麼我的輸入值沒有存儲在數組中?
- 3. Java爲什麼不在循環中存儲條件的值?
- 4. 爲什麼Java使用堆數據結構來存儲對象?
- 5. 如何將數組存儲在堆中?
- 6. 爲什麼不在相應的數組中存儲字符串?
- 7. 爲什麼基指針值存儲在堆棧
- 8. 爲什麼數值在MATLAB中以科學記數法存儲?
- 9. 爲什麼BLOB值不存儲在SQLite數據庫中的Android
- 10. Java數組存儲值
- 11. 數組不存儲值JAVA
- 12. 什麼數據將被存儲在堆棧中在C#
- 13. 爲什麼我的const數組存儲在堆棧而不是文本部分?
- 14. 爲什麼我的數組存儲不需要的值
- 15. 爲什麼在排序數組中需要臨時存儲?
- 16. 爲什麼在PHP中使用數組來存儲login -info?
- 17. 將數據存儲在數組中(Java)
- 18. 分析java heapdumps:爲什麼枚舉實例保存在堆中?
- 19. 爲什麼我的數組不存儲任何輸入值?
- 20. Java數組:找到數組中存儲值的索引。是
- 21. 爲什麼不能分割存儲在數組中的字符串並將其放回數組中? Java
- 22. Java表索引存儲在堆中?
- 23. 沒有存儲在數組中的值
- 24. 將值存儲在數組中的php
- 25. 在整數數組中存儲值
- 26. 將數值存儲在數組中
- 27. 將字符串數組的值存儲在變量中的java
- 28. 將數組作爲值存儲在關聯數組中
- 29. 在Java中存儲對象數組
- 30. Java - 讀取並存儲在數組中
爲什麼它怎麼了你? JVM應該處理任何內存分配和釋放問題。具體來說,我認爲這取決於你有什麼類型的數組,主要是vs對象。 – Jay 2009-12-15 14:23:26
@Jay。無論如何,它並不困擾我。但是我想知道爲什麼內存分配保存在堆中。這背後有什麼特別的原因嗎?多數民衆贊成在... – i2ijeya 2009-12-16 14:46:02