我正在尝试分配一个大矩阵(大约10GB).我正在使用64位JVM的64位机器.然后我的进程应该有2^64可用的字节,并且我将JVM堆大小设置为128G(如果重要的话,我的机器中有16GB的RAM).我的理解是我应该从操作系统获取内存,操作系统会将不需要的矩阵单元换出.但是我得到了上述异常.
编辑:
这就是我定义矩阵的方式:
Jama.Matrix A = new Matrix(num_words, num_documents);
Run Code Online (Sandbox Code Playgroud)
哪里num_words是大约100k并且num_documents是大约35k.另外值得一提的是这种类型double
EDIT2:
相关标志:
-Xms40m
-Xmx128g
-d64
Run Code Online (Sandbox Code Playgroud)
JVM 作为本机进程工作,在这方面:JVM 向操作系统请求内存,操作系统可以在 RAM 或交换区中分配内存。
您可以在 java 中分配的内存并不取决于您的 RAM,而是取决于-Xmx您在运行 JVM 时指定的命令行选项。如果 RAM 中没有足够的内存,JVM 会从交换区接收它,并且(我相信)甚至不知道这一点。
然而,
如果您需要处理大数据,则需要使用 BigMemory 产品(EhCache 或 Terracotta)。
最后,运行 jvisualvm 或使用-verbose:gc参数来查看堆分配。
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |