如果我加载的数据超过2 GB,则使用Java 8获取异常\u访问\u冲突

如果我加载的数据超过2 GB,则使用Java 8获取异常\u访问\u冲突,java,javafx,64-bit,Java,Javafx,64 Bit,我正在使用最新的Java Runtime 8,并在JavaFX中创建了一个应用程序,用于在画布中加载图像。 如果数据大小低于2GB,应用程序运行正常,但如果数据大小超过2GB,甚至超过1MB,则会记录以下错误 A fatal error has been detected by the Java Runtime Environment: EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000053def51c, pid=5716, tid

我正在使用最新的Java Runtime 8,并在JavaFX中创建了一个应用程序,用于在画布中加载图像。 如果数据大小低于2GB,应用程序运行正常,但如果数据大小超过2GB,甚至超过1MB,则会记录以下错误

A fatal error has been detected by the Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000053def51c, pid=5716, tid=10968

JRE version: Java(TM) SE Runtime Environment (8.0_20-b26) (build 1.8.0_20-b26)
Java VM: Java HotSpot(TM) 64-Bit Server VM (25.20-b23 mixed mode windows-amd64 compressed oops)
Problematic frame:    V  [jvm.dll+0x21f51c]

Failed to write core dump. Minidumps are not enabled by default on client versions of Windows

An error report file with more information is saved as:
C:\Users\105064864\Documents\NetBeansProjects\JavaFX3DApplication\hs_err_pid5716.log

Compiled method (nm)   51180 1220     n 0       sun.misc.Unsafe::copyMemory (native)
 total in heap  [0x0000000002f4fb10,0x0000000002f4fe90] = 896
 relocation     [0x0000000002f4fc30,0x0000000002f4fc78] = 72
 main code      [0x0000000002f4fc80,0x0000000002f4fe90] = 528

If you would like to submit a bug report, please visit:
   http://bugreport.sun.com/bugreport/crash.jsp
我试过几种选择,但都不管用

我使用的是Windows7,JRE是8.0

我的Java和OS都是64位的

我已经在8GB和16GB RAM上试用过

我已经将VM选项-Xmx4g设置为分配4GB及以上,但没有任何效果

机器的图形卡对数据是否有限制?
或者除了-Xmx4g之外还有其他设置吗?我们可以将其设置为显式允许超过2GB的数据加载?

由于幻数为2GB,首先想到的是在某个地方有一个数组被初始化以保存整个数据。因为在Java中数组索引必须是int Reference:类型,所以最大数组长度可以是Integer.MAX_值2147483647。因此,假设数据加载为单字节数组,我们得到2147483647字节~2GB的最大容量。因此,通过尝试分配更大的数组,应用程序可能导致上述异常

这种情况通常是通过将数据分块加载而不是将所有内容都存储在单字节数组中来处理的。然而,据我所知,并不是您的代码从存储中进行实际的物理读取。如果您提到应用程序的用例,可能更容易提出更高级别的解决方案