最高 字节数组的容量?

Rac*_*oon 3 java

我做了一个JavaClass,它使加,减,乘多。等等

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

每个数字都存储在Byte-Array中,并且byte-Array可以包含最大值。66.442

例:

(字节)数组= [1] [0] + [9] [0] = [1] [0] [0]

(字节)数组= [9] [0] * [9] [0] = [1] [8] [0] [0]

如果数字大于则我的班级文件不起作用(例如:999 ^ 999)

我如何解决这个问题,使更大的数字之间相加?

当字节数组达到66.443值时,VM给出此错误:

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

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

已解决: 使用多维字节数组来解决此问题。

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

仅需几秒钟即可在大数之间进行加法运算。

谢谢!

Pet*_*rey 5

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

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


And*_*s_D 2

每个数组可以容纳最大值Integer.MAX_VALUE。如果它崩溃了,我猜你会看到一个OutOfMemoryError. 通过使用更多堆空间启动 java vm 来解决这个问题:

 java -Xmx1024M  <...>
Run Code Online (Sandbox Code Playgroud)

(示例给出 1024 MB 堆空间)


java.lang.ClassNotFoundException如果虚拟机需要一个类但无法加载它,则抛出该错误 - 通常是因为它不在类路径上(有时是我们忘记编译 java 源文件的情况..)。这个异常与java数组操作完全无关。

评论区继续讨论:

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

首先仔细检查编译后的 java 文件是否确实存在,并仔细检查源代码中是否有拼写错误。此错误的典型原因:

  • 我们只是忘记编译源文件
  • 类文件在编译时位于类路径中,但在执行时不在类路径中
  • 我们做了一个Class.forName("MyClass")并且类名中有一个拼写错误