Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中处理海量数据_Java_Database - Fatal编程技术网

如何在java中处理海量数据

如何在java中处理海量数据,java,database,Java,Database,现在,我需要将数据库中的大量数据加载到向量中,但当我加载38000行数据时,程序抛出OutOfMemoryError异常。 我能做些什么来处理这件事 我想我的程序可能有内存泄漏,检测它的好方法?谢谢让你的程序使用更多内存或者更好地重新考虑策略。你真的需要在内存中存储这么多数据吗?让你的程序使用更多内存,或者更好地重新思考策略。内存中真的需要这么多数据吗?您可以尝试增加堆大小: java -Xms<initial heap size> -Xmx<maximum heap siz

现在,我需要将数据库中的大量数据加载到向量中,但当我加载38000行数据时,程序抛出OutOfMemoryError异常。 我能做些什么来处理这件事


我想我的程序可能有内存泄漏,检测它的好方法?谢谢

让你的程序使用更多内存或者更好地重新考虑策略。你真的需要在内存中存储这么多数据吗?

让你的程序使用更多内存,或者更好地重新思考策略。内存中真的需要这么多数据吗?

您可以尝试增加堆大小:

 java -Xms<initial heap size> -Xmx<maximum heap size>

您可以尝试增加堆大小:

 java -Xms<initial heap size> -Xmx<maximum heap size>

为JVM提供更多内存(通常使用
-Xmx
/
-Xms
),或者不要将所有数据加载到内存中


对于大量数据的许多操作,有一些算法不需要一次访问所有数据。其中一类算法是。

为JVM提供更多内存(通常使用
-Xmx
/
-Xms
),或者不将所有数据加载到内存中


对于大量数据的许多操作,有一些算法不需要一次访问所有数据。其中一类算法是。

您真的需要在内存中存储这么大的对象吗


根据您对该数据的处理方式,您可能希望将其拆分为较小的数据块。

您真的需要将如此大的对象存储在内存中吗


根据您对该数据的处理方式,您可能希望将其拆分为较小的数据块。

逐节加载数据。这不会让您同时处理所有数据,但您不必更改提供给JVM的内存。

逐节加载数据。这不会让您同时处理所有数据,但您不必更改提供给JVM的内存。

是否可以优化您的数据类?我见过一个案例,有人在内存中存储相对较少的数据对象时,使用字符串代替本机数据类型,例如int或double,用于每个类成员,该类成员都会出现OutOfMemory错误。请注意,您没有复制对象。当然,还要增加堆的大小:

 java -Xms<initial heap size> -Xmx<maximum heap size>

java-Xmx512M(或您认为必要的任何东西)

是否可以优化您的数据类?我见过一个案例,有人在内存中存储相对较少的数据对象时,使用字符串代替本机数据类型,例如int或double,用于每个类成员,该类成员都会出现OutOfMemory错误。请注意,您没有复制对象。当然,还要增加堆的大小:

 java -Xms<initial heap size> -Xmx<maximum heap size>

java-Xmx512M(或任何您认为必要的东西)

如果必须将所有数据都存储在内存中,请尝试缓存常见的对象。例如,如果您正在查看员工记录,并且这些记录都有一个职务,则在加载数据时使用HashMap并重用已找到的职务。这可以显著降低您使用的内存量


此外,在您做任何事情之前,请使用探查器查看内存在哪里被浪费,并检查可以被垃圾收集的东西是否没有浮动的引用。同样,String是一个常见的例子,因为例如,如果您使用2000字符字符串的前10个字符,并且您使用子字符串而不是分配新字符串,那么您实际拥有的是对char[2000]数组的引用,两个索引分别指向0和10。这也是一个巨大的内存浪费。

如果必须将所有数据都存储在内存中,请尝试缓存常见的对象。例如,如果您正在查看员工记录,并且这些记录都有一个职务,则在加载数据时使用HashMap并重用已找到的职务。这可以显著降低您使用的内存量


此外,在您做任何事情之前,请使用探查器查看内存在哪里被浪费,并检查可以被垃圾收集的东西是否没有浮动的引用。同样,String是一个常见的例子,因为例如,如果您使用2000字符字符串的前10个字符,并且您使用子字符串而不是分配新字符串,那么您实际拥有的是对char[2000]数组的引用,两个索引分别指向0和10。同样,这也是一个巨大的内存浪费。

您可以使用探查器运行代码,以了解内存被占用的方式和原因。调试循环并观察实例化的内容。它们的数量不限;JProfiler,请参阅,等等。

您可以使用探查器运行代码,以了解内存被占用的方式和原因。调试循环并观察实例化的内容。它们的数量不限;JProfiler,请参阅,等等。

我知道您正在尝试将数据读入向量-否则,如果您尝试在何处显示它们,我会建议您使用。它是为将大量数据读入表而设计的


我相信它对这里的其他读者可能有用。

我知道您正在尝试将数据读入矢量-否则,如果您尝试在何处显示它们,我会建议您使用。它是为将大量数据读入表而设计的


我相信它可能对这里的其他读者有用。

使用内存映射文件。内存映射文件基本上可以按您的需要增长,而不会撞到堆。它确实要求您以解码友好的方式对数据进行编码。(比如,为数据中的每一行保留一个固定的大小是有意义的,以便快速跳过许多行。)


这让你很容易处理。它是一个框架,旨在像Hibernate对关系数据库和JAXB/XStream/XmlBeans对XML所做的那样对二进制编码数据进行处理。

使用内存映射文件。内存映射文件基本上可以按您的需要增长,而不会撞到堆。它确实要求您以解码友好的方式对数据进行编码。(比如,保留一个fi是有意义的