我创建了一个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}
只需几秒钟即可在大数字之间添加。
谢谢!
答案 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课程。看起来你正在以某种形式的十进制表示来进行数学运算,这不是很有效的内存。