JAVA 大数组问题
以前一直做C++,刚开始学JAVA,请大家多多帮忙
想定义一个大的数组(大概600KB),数组只用来提供初始化数据,运行过程中不会更新数组中的内容,下面这样的定义编译器报“Too many constants, the constant pool for xxx would exceed 65536 entries”错误。
char g_MainData[] = {
0x81, 0x00, 0x7f, 0x00, 0x7f, 0x00, 0x06, 0x00, 0x04, 0x01, 0x85, 0x01, 0x01, 0x01, 0x7f, 0x00......};
不希望用new方式动态分配空间,因为数组目的是用来提供600KB的初始化数据,也不想用读文件的方式,因为读文件速度太慢,请大家帮忙看看怎么解决。
------解决方案--------------------char g_MainData[] = {
0x81, 0x00, 0x7f, 0x00, 0x7f, 0x00, 0x06, 0x00, 0x04, 0x01, 0x85, 0x01, 0x01, 0x01, 0x7f, 0x00......};
改成
char[] g_MainData = {
0x81, 0x00, 0x7f, 0x00, 0x7f, 0x00, 0x06, 0x00, 0x04, 0x01, 0x85, 0x01, 0x01, 0x01, 0x7f, 0x00......};
然后看看报错不。
你那是给一个对象赋值,不是赋值给一个数组
java中char数组上限大约是上百万个,和内存有关。
------解决方案--------------------这个是直接初始化数组时元素的数量限制 <=2^16 ,虽然还没找到官方出处。
这里可以参考:
http://www.aicas.com/jamaica/3.2/doc/html/limitations.html
但动态分配数组大小是不受此限制的。
不妨初始化n个这样的数组,然后动态分配给一个更大的数组。
------解决方案--------------------你可以更改java虚拟机占用的内存,试试把java虚拟机的内存调整的大一点
------解决方案--------------------
难道char g_MainData[]和char[] g_MainData不一样吗?
需要修改JVM的启动参数吧。
------解决方案--------------------
嗯,是我错了。以前没用过
------解决方案--------------------有没有new并无区别