Java 为什么我不能增加堆大小?
我正在使用JDK1.8.0_25,我正在尝试使用一个大数据库。它的重量约为2gb。 我通过eclipse运行程序。 我在64位Windows7上使用64位java版本。 有8gb内存。 每次我尝试连接到它时,都会出现java堆错误。。。所以我试着增加堆的大小,但没有成功! visualVM说我的最大容量仍然是2gb 我所做的是-控制面板>程序>java>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),但仍然没有任何效果 关于如何增加堆大小还有其他建议吗 编辑:
我在我的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,您也会更快地得到答案。