首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Java内存管理- java“错误:无法创建java虚拟机”

Java内存管理- java“错误:无法创建java虚拟机”
EN

Stack Overflow用户
提问于 2014-10-28 15:01:41
回答 2查看 507关注 0票数 2

我在一台有16 on和12 on可用的机器上定义了一个带有initial-heap-size="512m" max-heap-size="1024m"的jnlp文件。由于本机库,JVM的运行是一个32位JVM。我知道我必须有1Gb的连续内存来分配最大内存。如果我将max-heap-size减少到768,那么它将正常运行,有时我不需要减少它。

两个问题:

  1. 为什么机器在JVM启动之前首先检查最大堆大小?是否有正在执行的断言?
  2. 如果我有12 1Gb可用-假设有一个连续的1Gb块可用,为什么我不能从get go分配完整的1GB呢?
EN

回答 2

Stack Overflow用户

发布于 2014-10-28 19:36:26

如果你不能使用64位JVM.

如果在Windows上使用32位JVM,则需要研究“大地址感知”(JVM使用/LARGEADDRESSAWARE选项编译/链接)。它将允许您使用更大的内存占用32位.您可以在特定的可执行文件上设置位。

32位Windows可执行文件使用/LARGEADDRESSAWARE的缺点?

如果在Linux上,请查看系统的硬限制或软限制。这可能限制了进程的最大大小。此外,您可能有过程控制组。

对于ulimits,在Linux/UNIX上尝试

代码语言:javascript
代码运行次数:0
运行
复制
ulimit -a

特别是查看ulimit -m或-v设置。如果这些是无限的,您可能正在体验另一种类型的控制机制。

票数 0
EN

Stack Overflow用户

发布于 2014-10-29 08:35:34

部分受过教育的猜测:

如果我有12 1Gb可用-假设有一个连续的1Gb块可用,为什么我不能从get go分配完整的1GB呢?

您曾经写过,JVM运行是一个32位JVM,因为有了本机库。请注意,这些本机库是您进程的一部分,即使它们没有分配大量内存,它们也可能会将2GB的虚拟地址空间(没有LARGESPACEAWARE限制在其中)碎片化,这样您就可能没有一个连续的1GB块了。您可能需要研究本机库的基址和重基。有一个名为VMMap的免费工具,它非常适合研究这些问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26642826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档