gpt4 book ai didi

java - 运行 Java 代码时内存不足

转载 作者:行者123 更新时间:2023-11-30 05:06:13 24 4
gpt4 key购买 nike

我有一个保存为文本文件的数据集,其中基本上包含逐行存储的 vector 。我的 vector 的维度是 10k,我有 250 个这样的 vector 。每个 vector 条目都是 double 的。这是一个例子:

vector 1 -> 0.0 0.0 0.0 0.439367 0.0 .....10k 个这样的条目

vector 2 -> 0.0 0.0 0.0 0.439367 0.0 0.0 0.0 0.0 .....10k 个这样的条目

...

...

vector 250 -> 0.0 1.203973 0.0 0.0 0.0 .....10k 个这样的条目

现在,如果我计算一下,这应该占用 10k X 16bytes X 250 空间(假设每个 vector 条目都是 double 占用 16 字节空间),即约 40MB 空间。但是我看到文件大小仅显示为 9.8MB。我是不是哪里出错了?

问题是我在我的 Java 代码中使用了这些数据。我的算法的空间复杂度是 O( vector 中的条目数 X 条目数)。即使当我通过分配 4GB 内存来运行代码时,我仍然会用完堆空间。我错过了什么?

谢谢。安迪

最佳答案

在这么多人猜测大小之后,我做了3个简单的测试,并使用Eclipse Memory Analyzer来确定大小。 (Win7、1.6.0_21 Java HotSpot (TM) 64 位服务器虚拟机)

  • double[][] = 大小:19,2 MB 类:328 个对象:2,7k
  • Double[][] structure = 大小:76,5 MB 类:332 个对象:2,5m
  • ArrayList<ArrayList<Double>> = 大小:79,6 MB 类:330 个对象:2,5m

256MB ( java -Xmx256m Huge ) 足以运行测试。

所以我猜问题不在于大小,可能有两件事:

  • 算法存在错误
  • jvm 未使用 4GB 运行
<小时/>

如果有人对代码感兴趣:

import java.util.ArrayList;
import java.util.List;

public class Huge {

private static final int NUMBER_OF_VECTORS = 250;
private static final int VECTOR_SIZE = 10000;

//Size: 19,2 MB Classes: 328 Objects: 2,7k
public static void doulbeArray() {

double[][] structure = new double[NUMBER_OF_VECTORS][];

for(int i = 0; i < NUMBER_OF_VECTORS; i++) {
structure[i] = new double[VECTOR_SIZE];
}
}

//Size: 76,5 MB Classes: 332 Objects: 2,5m
public static void doubleWrapperArray() {

Double[][] structure = new Double[NUMBER_OF_VECTORS][];

for(int i = 0; i < NUMBER_OF_VECTORS; i++) {
structure[i] = new Double[VECTOR_SIZE];
for (int k = 0; k < VECTOR_SIZE; k++) {
structure[i][k] = Double.valueOf(Math.random());
}
}
}

//Size: 79,6 MB Classes: 330 Objects: 2,5m
public static void list() {

List<List<Double>> structure = new ArrayList<List<Double>>();

for(int i = 0; i < NUMBER_OF_VECTORS; i++) {
List<Double> vector = new ArrayList<Double>();
for (int k = 0; k < VECTOR_SIZE; k++) {
vector.add(Double.valueOf(Math.random()));
}
structure.add(vector);
}
}
}

关于java - 运行 Java 代码时内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5008255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com