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

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

對于二維數(shù)組進(jìn)行分析,首先對于多維數(shù)組的概念,大家可以參考這篇文章:http://m.fzitv.net/article/154585.htm
多維數(shù)組實(shí)際存儲的時候就是一維數(shù)組,高維數(shù)組不斷的降維轉(zhuǎn)化為低維數(shù)組,例如二維數(shù)組就是一個數(shù)組的數(shù)組,即每一個一維數(shù)組里面包含一個另外一個一維數(shù)組的引用。以一個MxN的double類型的二維數(shù)組為例,其實(shí)際占用內(nèi)存總量為:(8MN+32M+24) 約等于8MN。這里仍然以圖示進(jìn)行講解:(這里以64位架構(gòu)的計(jì)算機(jī)為例,每個對象引用地址為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ù)存儲容量,可以按照相似的方法進(jìn)行分析即可。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- Java關(guān)于含有繼承類的成員初始化過程講解
- Java接口名稱沖突問題的講解
- Java中關(guān)于子類覆蓋父類的拋出異常問題
- Java如何將處理完異常之后的程序能夠從拋出異常的地點(diǎn)向下執(zhí)行?
- Java反射機(jī)制的講解
- Java為什么匿名內(nèi)部類參數(shù)引用需要用final進(jìn)行修飾?
- 關(guān)于JAVA_HOME路徑修改之后JDK的版本依然不更改的解決辦法
- Java中轉(zhuǎn)換器設(shè)計(jì)模式深入講解
- java集合與數(shù)組的相同點(diǎn)和不同點(diǎn)
- 如何理解Java中基類子對象的構(gòu)建過程從"基類向外"進(jìn)行擴(kuò)散的?
相關(guān)文章
完美解決idea光標(biāo)變成了insert光標(biāo)狀態(tài)的問題
這篇文章主要介紹了完美解決idea光標(biāo)變成了insert光標(biāo)狀態(tài)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Maven?Web項(xiàng)目使用Cargo插件實(shí)現(xiàn)自動化部署的詳細(xì)步驟
cargo ,它是一組幫助用戶實(shí)現(xiàn)自動化部署,操作Web容器的工具,并且?guī)缀踔С炙械腤eb容器,這篇文章主要介紹了Maven?Web項(xiàng)目使用Cargo實(shí)現(xiàn)自動化部署,需要的朋友可以參考下2023-02-02
java實(shí)現(xiàn)靜默加載Class示例代碼
這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)靜默加載Class的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10
java門禁系統(tǒng)面向?qū)ο蟪绦蛟O(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了java門禁系統(tǒng)面向?qū)ο蟪绦蛟O(shè)計(jì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01
Java 反轉(zhuǎn)帶頭結(jié)點(diǎn)的單鏈表并顯示輸出的實(shí)現(xiàn)過程
這篇文章主要介紹了Java 反轉(zhuǎn)帶頭結(jié)點(diǎn)的單鏈表并顯示輸出,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-11-11
java后臺實(shí)現(xiàn)支付寶支付接口和支付寶訂單查詢接口(前端為APP)
這篇文章主要介紹了java后臺實(shí)現(xiàn)支付寶支付接口和支付寶訂單查詢接口(前端為APP),非常具有實(shí)用價值,需要的朋友可以參考下2018-08-08
Java多線程中Thread.currentThread()和this的區(qū)別詳解
這篇文章主要介紹了Java多線程中Thread.currentThread()和this的區(qū)別詳解,Thread.currentThread()方法返回的是對當(dāng)前正在執(zhí)行的線程對象的引用,this代表的是當(dāng)前調(diào)用它所在函數(shù)所屬的對象的引用,需要的朋友可以參考下2023-08-08
在SpringBoot中使用MongoDB完成數(shù)據(jù)存儲
本文主要介紹了在SpringBoot中如惡化使用MongoDB完成數(shù)據(jù)存儲,接下來這篇我們將圍繞MongoDB進(jìn)行,MongoDB是一個開源的,面向文檔的NoSQL數(shù)據(jù)庫管理系統(tǒng),使用類似JSON的BSON(二進(jìn)制JSON)格式來存儲數(shù)據(jù),具有靈活的數(shù)據(jù)模型和強(qiáng)大的查詢功能,需要的朋友可以參考下2023-11-11

