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

时间:2015-05-28 13:14:05

标签: java eclipse jvm heap-memory

即时通讯使用jdk 1.8.0_25并尝试使用大型数据库。它的重量约为2gb。 我通过eclipse运行程序。 我在64位Windows 7上使用64位java版本。 得到8gb内存。 每次我尝试连接到它,我得到java堆错误...所以我尝试增加我的堆大小,我没有成功! visualVM说我的最大值仍然是2GB。

我做的是 - 控制面板>节目> java> java>视图。 我已经将-Xmx6g参数添加到我的jdk中(我确定它是正确的jdk)但仍然无效。

关于如何增加堆大小的任何其他建议?

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

try {

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

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

3 个答案:

答案 0 :(得分:1)

来自Ucanaccess主页(首次点击Google)。

  

处理大型数据库并使用默认内存时   设置(即,使用Driver Property memory = true),建议使用   用户使用-Xms和JVM为JVM分配足够的内存   -Xmx选项。否则需要设置Driver Property memory = false(连接   康恩=的DriverManager.getConnection( “JDBC:ucanaccess:// C:/pippo.mdb;存储器=假”);)

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

然而,除非您绝对需要将大量数据加载到内存中,否则通常不希望这样。幸运的是Ucanaccess有这个参数。

答案 1 :(得分:0)

使用Eclispe时增加JVM的堆大小:

窗口 - >偏好 - > Java - >已安装的JRE

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

PS:正如评论部分已经提到的,你不应该把整个数据库加载到内存中,所以最好还是检查代码来增加堆

答案 2 :(得分:0)

替代memory = false的其他两个参数可能有用:

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

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

它们都是在2.0.9.4中引入的。