首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JVM需要分配一个字符数组吗?

JVM需要分配一个字符数组吗?
EN

Stack Overflow用户
提问于 2015-03-13 18:51:06
回答 2查看 195关注 0票数 0

考虑以下一行程序:

代码语言:javascript
复制
public static void main(String[] args) throws Exception {
    // 134217728 * 2 bytes / 1024 / 1024 = 256M
    char[] array = new char[134217728]; 
}

JVM需要多少内存来分配这个256 m字符数组?

原来答案是-Xmx384m。现在让我们试试512米字符数组..。

代码语言:javascript
复制
// 268435456 * 2 bytes / 1024 / 1024 = 512M
char[] array = new char[268435456]; 

答案似乎是-Xmx769m。

在运行过程中,对于一个大小为m的字符数组,只需几个例子。jvm需要至少150万兆的内存来分配数组。这似乎很多,有人能解释一下这里发生了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-13 18:59:08

我相信你在观察Oracle JVM分配内存的方式

特别是,整个数组必须符合一个“一代”。默认情况下,旧代的大小是新一代的两倍--这意味着每添加一台3MB,就只能在老一代中获得2MB的额外空间。如果更改比率,则可以将char数组分配到较小的总大小中。例如,这适用于512 me数组:

代码语言:javascript
复制
java -Xmx530M -XX:NewRatio=50 Test

顺便说一句,您可以看到字节数组的相同效果,然后您不需要担心将数组的长度增加一倍才能得到字节大小。(类引用和长度有较小的常量开销,但很明显,这是微不足道的。)

票数 6
EN

Stack Overflow用户

发布于 2015-03-13 18:59:35

环境本身需要一点空间,就像在一个注释中一样,它取决于使用的JVM和编译器(OpenJdk或Oracle 6/7/8)。总而言之,它应该以大小为导向: Character.SIZE * array.length。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29039821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档