Java中數(shù)組在內(nèi)存中存放原理的講解
Java中數(shù)組被實現(xiàn)為對象,它們一般都會因為記錄長度而需要額外的內(nèi)存。對于一個原始數(shù)據(jù)類型的數(shù)組,一般需要24字節(jié)的頭信息再加上保存值所需的內(nèi)存,其中24字節(jié)的頭信息分別包含以下幾個部分。

下面分別分析一維、二維、三維的數(shù)組存儲情況。
下面首先對一維數(shù)組進行分析,以int[]型數(shù)組為例,假設數(shù)組長度為N,那么需要的內(nèi)存占用(24+4N)個字節(jié),原因分析比較簡單,圖解示例如下:即占用內(nèi)存總量=頭信息內(nèi)存+數(shù)組N個int值占用內(nèi)存。

對于二維數(shù)組進行分析,首先對于多維數(shù)組的概念,大家可以參考這篇文章:http://www.dhdzp.com/article/154585.htm
多維數(shù)組實際存儲的時候就是一維數(shù)組,高維數(shù)組不斷的降維轉(zhuǎn)化為低維數(shù)組,例如二維數(shù)組就是一個數(shù)組的數(shù)組,即每一個一維數(shù)組里面包含一個另外一個一維數(shù)組的引用。以一個MxN的double類型的二維數(shù)組為例,其實際占用內(nèi)存總量為:(8MN+32M+24) 約等于8MN。這里仍然以圖示進行講解:(這里以64位架構的計算機為例,每個對象引用地址為8位)

對于三維數(shù)組的分析,仍然以M x N x Q的double數(shù)組為例,與上面的分析過程類似,可以將三維數(shù)組轉(zhuǎn)化成一個一維數(shù)組,該一維數(shù)組保存指向二維數(shù)組的引用。對于二維數(shù)組的分析過程則和上面的過程一樣。
則占用的內(nèi)存總共為:24 + 8M + M*(24 + 8N) + M*N(24 + 8Q)字節(jié)。
對于更高維的數(shù)據(jù)存儲容量,可以按照相似的方法進行分析即可。
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內(nèi)容請查看下面相關鏈接
相關文章
完美解決idea光標變成了insert光標狀態(tài)的問題
這篇文章主要介紹了完美解決idea光標變成了insert光標狀態(tài)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Maven?Web項目使用Cargo插件實現(xiàn)自動化部署的詳細步驟
cargo ,它是一組幫助用戶實現(xiàn)自動化部署,操作Web容器的工具,并且?guī)缀踔С炙械腤eb容器,這篇文章主要介紹了Maven?Web項目使用Cargo實現(xiàn)自動化部署,需要的朋友可以參考下2023-02-02
Java 反轉(zhuǎn)帶頭結點的單鏈表并顯示輸出的實現(xiàn)過程
這篇文章主要介紹了Java 反轉(zhuǎn)帶頭結點的單鏈表并顯示輸出,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-11-11
java后臺實現(xiàn)支付寶支付接口和支付寶訂單查詢接口(前端為APP)
這篇文章主要介紹了java后臺實現(xiàn)支付寶支付接口和支付寶訂單查詢接口(前端為APP),非常具有實用價值,需要的朋友可以參考下2018-08-08
Java多線程中Thread.currentThread()和this的區(qū)別詳解
這篇文章主要介紹了Java多線程中Thread.currentThread()和this的區(qū)別詳解,Thread.currentThread()方法返回的是對當前正在執(zhí)行的線程對象的引用,this代表的是當前調(diào)用它所在函數(shù)所屬的對象的引用,需要的朋友可以參考下2023-08-08
在SpringBoot中使用MongoDB完成數(shù)據(jù)存儲
本文主要介紹了在SpringBoot中如惡化使用MongoDB完成數(shù)據(jù)存儲,接下來這篇我們將圍繞MongoDB進行,MongoDB是一個開源的,面向文檔的NoSQL數(shù)據(jù)庫管理系統(tǒng),使用類似JSON的BSON(二進制JSON)格式來存儲數(shù)據(jù),具有靈活的數(shù)據(jù)模型和強大的查詢功能,需要的朋友可以參考下2023-11-11

