avatar
关于数组的内存# Java - 爪哇娇娃
j*s
1
java里开辟数组的时候,好像有很多额外的开销啊。
[1000][1] 比 [1][1000] 需要多花费N倍的内存,是不是因为 [1000][1]中开辟
1000个一维数组的时候的额外开销呢?
多谢指点!
avatar
j*s
2
在网上搜到一个这个:
这是一个与Java内存管理系统相关的问题。由于无论Java语言规范或VM规范都没有明确
要求内存管理系统的具体实现,所以这个问题依赖于具体的JVM。 一般而言,一个对象
的size大于一个int的size, 而int[50][2] 包含了50个int[], 而int[2][50]仅包含2个
int[], 故int[50][2]的size至少不会小于int[2][50]. 对于SUN J2SE 5.0 JVM, 可以
用Runtime.freeMemory()来估测这个问题。java.lang.management 包中也包含了估测
内存的方法。试一下便知.
测试语句:
long aa = Runtime.getRuntime().freeMemory();
int[][] test_0 = new int[50][2];
long bb = Runtime.getRuntime().freeMemory();
int[][] test_1 = new int[2][50];
long cc = Runtime.getRuntim
avatar
j*s
3
但是不知道原理,这些额外的内存到底分配到什么地方去了?
avatar
o*g
4
去水木java版找zms的一篇讲内存分配的文章
好像是每一个object至少要多4bytes

【在 j*******s 的大作中提到】
: java里开辟数组的时候,好像有很多额外的开销啊。
: [1000][1] 比 [1][1000] 需要多花费N倍的内存,是不是因为 [1000][1]中开辟
: 1000个一维数组的时候的额外开销呢?
: 多谢指点!

avatar
B*h
5
嗯,是一个object header的概念

【在 o***g 的大作中提到】
: 去水木java版找zms的一篇讲内存分配的文章
: 好像是每一个object至少要多4bytes

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。