Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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_Eclipse_Jvm_Heap Memory - Fatal编程技术网

Java 为什么我不能增加堆大小?

Java 为什么我不能增加堆大小?,java,eclipse,jvm,heap-memory,Java,Eclipse,Jvm,Heap Memory,我正在使用JDK1.8.0_25,我正在尝试使用一个大数据库。它的重量约为2gb。 我通过eclipse运行程序。 我在64位Windows7上使用64位java版本。 有8gb内存。 每次我尝试连接到它时,都会出现java堆错误。。。所以我试着增加堆的大小,但没有成功! visualVM说我的最大容量仍然是2gb 我所做的是-控制面板>程序>java>java>视图。 我在我的jdk中添加了-Xmx6g参数(我确信它是正确的jdk),但仍然没有任何效果 关于如何增加堆大小还有其他建议吗 编辑:

我正在使用JDK1.8.0_25,我正在尝试使用一个大数据库。它的重量约为2gb。 我通过eclipse运行程序。 我在64位Windows7上使用64位java版本。 有8gb内存。 每次我尝试连接到它时,都会出现java堆错误。。。所以我试着增加堆的大小,但没有成功! visualVM说我的最大容量仍然是2gb

我所做的是-控制面板>程序>java>java>视图。
我在我的jdk中添加了-Xmx6g参数(我确信它是正确的jdk),但仍然没有任何效果

关于如何增加堆大小还有其他建议吗

编辑: 下面是失败的代码行。只是为了让你们确定这不是代码失败

try {

        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        conn = DriverManager
                .getConnection("jdbc:ucanaccess://D:/Work/currentFolder/reallyBigDB.mdb");

conn=。。。。。。是失败的一行。

要在使用Eclispe时增加JVM的堆大小,请执行以下操作:

窗口->首选项->Java->已安装的JRE

然后选择您正在使用的JRE,单击编辑并在默认VM参数中输入JVM的参数

PS:正如评论部分已经提到的,您不应该在内存中加载整个DB,因此最好是查看您的代码,而不是从主页增加堆(第一次点击Google)

在处理大型数据库和使用默认内存时 设置(即,当驱动程序属性内存为true时),建议 用户使用-Xms和 -Xmx选项。否则需要设置驱动程序属性memory=false(连接 conn=DriverManager.getConnection(“jdbc:ucanaccess://c:/pippo.mdb;memory=false”);)

现在显然还有另一个问题,堆大小。这是一个日食问题。您可以在Eclipse中编译它,并在命令行上运行它,在那里提供内存参数。这至少是确保参数正确的可靠方法


然而,除非您必须将大量数据加载到内存中,否则您通常不想这样做。幸运的是,Ucanaccess有这个参数。

除了memory=false之外,还有两个可能有用的参数:

SkipIndex=true(它避免了由于索引不是完整性约束而导致的内存占用)

如果数据库大小是由blob/ole数据引起的,则Lobscale=1。在这种特殊情况下,加载时间和内存占用都将大大减少


它们都是在2.0.9.4中引入的。

什么是“我在我的jdk中添加了-Xmx6g参数”呢?更不用说,你很可能不想在内存中读取整个数据库来处理它。正如在另一条评论中所说——“我在我的jdk中添加了-Xmx6g参数”=输入了参数-Xmx6g作为运行时参数。现在,我的程序在创建连接时失败,甚至没有将DB加载到resultset中。如果您对改进此步骤有任何想法,我很想听听。向我们展示创建
连接的代码。
.edited-its现在的问题是“ive added-Xmx6g parameter to my jdk”=输入参数-Xmx6g作为运行时参数。我试着在eclipse中添加堆大小参数,但看起来最大堆是2g。你能告诉我,如果我不加载整个数据库,我该如何处理这么大的数据库吗?“看起来最大堆是2g”你怎么能告诉我?您不必加载数据库来处理它,只需在每次查询所需数据时发出请求即可。在问题中看到您的注释,您的代码可能有问题(而不是堆的设置)。你应该打开一个新的问题与代码和错误,我将编辑代码部分失败在一分钟内。。。只是说这个代码部分适用于其他(较小的)数据库。。。它只在这个数据库上失败,问题肯定是堆大小达到了极限。我使用visualVM监控jvm。如果您提供了所有相关信息:您正在使用Ucanaccess读取.mdb,您也会更快地得到答案。