即时通讯使用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 = ......是失败的一行。
答案 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中引入的。