什么是最大值字节数的容量?

时间:2011-06-09 08:07:52

标签: java

我创建了一个JavaClass,它正在制作add,sub,mult。等

数字就像(155 ^ 199 [+, - ,,/] 555 ^ 669 [+, - ,,/] ..... [+, - ,*, /] x ^ n);

每个数字都存储在Byte-Array中,而byte-Array可以包含max。 66.442

示例:

(byte)array = [1] [0] + [9] [0] = [1] [0] [0]

(byte)array = [9] [0] * [9] [0] = [1] [8] [0] [0]

如果数字大于(例如:999 ^ 999)

,我的班级文件无效

如何解决这个问题,以便在更大的数字之间进行添加?

当byte-Array达到66.443值时,VM会给出以下错误:

引起:java.lang.ClassNotFoundException 。这实际上不是正确的错误描述。

这意味着,如果我有一个66.443值的字节数组,则该类无法正确读取。

解决: 使用多维字节数组来解决这个问题。

array {array,... nth-array} [+, - ,/] nth-array {array,... nth-array}

只需几秒钟即可在大数字之间添加。

谢谢!

5 个答案:

答案 0 :(得分:4)

Java中的单个方法仅限于64KB的字节代码。在代码中初始化数组时,它使用字节代码来执行此操作。这会将您可以定义数组的最大大小限制为大约此大小。

如果您有一个大字节数组值,我建议您将其存储在外部文件中并在运行时加载它。这样,您可以拥有最大2 GB的字节数组。如果你需要更多,你需要有一个数组数组。

答案 1 :(得分:2)

每个数组最多可以包含Integer.MAX_VALUE个值。如果崩溃,我猜您会看到OutOfMemoryError。通过启动具有更多堆空间的java vm来修复此问题:

 java -Xmx1024M  <...>

(示例给出1024 MByte堆空间)


如果虚拟机需要一个类并且无法加载它,则抛出

java.lang.ClassNotFoundException - 通常是因为它不在类路径上(有时我们只是忘记编译java源文件...) 。这个例外完全不相关到java数组操作。

继续评论部分的讨论:

缺少的类的名称 非常重要。在抛出异常的代码行中,VM第一次尝试加载类ClassBigMath并失败。类加载器在类路径上找不到文件ClassBigMath.class

如果编译的java文件确实存在,请仔细检查 ,并仔细检查源代码中是否存在拼写错误。出现此错误的典型原因:

  • 我们忘记编译源文件
  • 类文件在编译时位于类路径上,但不在执行时
  • 我们执行Class.forName("MyClass")并在班级名称中输入错误

答案 2 :(得分:2)

您的实际代码是什么样的?你得到什么错误?

如果存在大量连续内存,则Java字节数组最多可容纳2 ^ 31-1个值。

答案 3 :(得分:1)

java.math.BigInteger是处理大量数据的更好解决方案。有没有理由,你选择了字节数组?

答案 4 :(得分:0)

Java中数组的最大大小由Integer.MAX_VALUE给出。这是2 ^ 31-1个元素。如果没有足够的可用内存,您可能会获得更少的OOM异常。除此之外,你可能想看看BigInteger课程。看起来你正在以某种形式的十进制表示来进行数学运算,这不是很有效的内存。