内存不足,无法继续运行Java Runtime环境

问题描述 投票:0回答:2

我有一个带有4 GB RAM和Windows操作系统的系统。我安装了VMWare来设置带2GB RAM的Ubuntu虚拟机。在Ubuntu中,我打开了Eclipse并开始编码,Eclipse一次又一次地开始关闭,我开始收到以下错误:

 There is insufficient memory for the Java Runtime Environment to continue.     Native memory allocation (mmap) failed to map 28311552 bytes for     committing reserved memory.
Possible reasons:
 The system is out of physical RAM or swap space
   In 32 bit mode, the process size limit was hit
 Possible solutions:
   Reduce memory load on the system
   Increase physical memory or swap space
   Check if swap backing store is full
   Use 64 bit Java on a 64 bit OS
   Decrease Java heap size (-Xmx/-Xms)
   Decrease number of Java threads
   Decrease Java thread stack sizes (-Xss)
   Set larger code cache with -XX:ReservedCodeCacheSize=
 This output file may be truncated or incomplete.

  Out of Memory Error (os_linux.cpp:2640), pid=4608, tid=0x6dc6eb40

 JRE version: Java(TM) SE Runtime Environment (8.0_161-b12) (build 1.8.0_161-b12)
 Java VM: Java HotSpot(TM) Client VM (25.161-b12 mixed mode linux-x86 )
 Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again


---------------  T H R E A D  ---------------

Current thread (0x099ab400):  VMThread [stack: 0x6dbee000,0x6dc6f000] [id=4629]

Stack: [0x6dbee000,0x6dc6f000],  sp=0x6dc6d240,  free space=508k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x5bffaf]  VMError::report_and_die()+0x16f
V  [libjvm.so+0x20e115]  report_vm_out_of_memory(char const*, int, unsigned int, VMErrorType, char const*)+0x55
V  [libjvm.so+0x4a2686]  os::Linux::commit_memory_impl(char*, unsigned int, bool)+0xe6
V  [libjvm.so+0x4a2afd]  os::pd_commit_memory_or_exit(char*, unsigned int, unsigned int, bool, char const*)+0x2d
V  [libjvm.so+0x49c660]  os::commit_memory_or_exit(char*, unsigned int, unsigned int, bool, char const*)+0x30
V  [libjvm.so+0x2741ad]  G1PageBasedVirtualSpace::commit_internal(unsigned int, unsigned int)+0x9d
V  [libjvm.so+0x27440c]  G1PageBasedVirtualSpace::commit(unsigned int, unsigned int)+0xfc
V  [libjvm.so+0x276a68]  G1RegionsLargerThanCommitSizeMapper::commit_regions(unsigned int, unsigned int)+0x28
V  [libjvm.so+0x2bc2ba]  HeapRegionManager::commit_regions(unsigned int, unsigned int)+0x5a
V  [libjvm.so+0x2bd343]  HeapRegionManager::make_regions_available(unsigned int, unsigned int)+0x23
V  [libjvm.so+0x2bd851]  HeapRegionManager::expand_by(unsigned int)+0xa1
V  [libjvm.so+0x250a7c]  G1CollectedHeap::expand(unsigned int)+0x11c
V  [libjvm.so+0x25b3fa]  G1CollectedHeap::do_collection_pause_at_safepoint(double)+0xd5a
V  [libjvm.so+0x5cbafe]  VM_G1IncCollectionPause::doit()+0x6e
V  [libjvm.so+0x5caad7]  VM_Operation::evaluate()+0x47
V  [libjvm.so+0x5c8ba3]  VMThread::evaluate_operation(VM_Operation*)+0xb3
V  [libjvm.so+0x5c8f40]  VMThread::loop()+0x1b0
V  [libjvm.so+0x5c93a5]  VMThread::run()+0x85
V  [libjvm.so+0x4a5219]  java_start(Thread*)+0x119
C  [libpthread.so.0+0x6295]  start_thread+0xe5

VM_Operation (0xbfbfede0): G1IncCollectionPause, mode: safepoint, requested by thread 0x0988f800

--------------  P R O C E S S  ---------------
java linux eclipse out-of-memory heap-memory
2个回答
1
投票

Java虚拟机进程内存不足。

您可以做多种可能性。在我看来,如果你想保持流程的当前限制,以下可能性最有希望:

  • 减少Java堆大小(-Xmx / -Xms): 在eclipse.ini,可能有像-Xmx1024m这样的线,你可以用例如-Xmx640m代替。尝试哪个最大堆空间仍足以满足您的需求。确保-Xms不大于-Xmx
  • 当且仅当您拥有64位系统时,您可以使用Eclipse 64位和Eclipse OpenJ9而不是Eclipse 32位以及您当前使用的Java HotSpot 32位VM。默认情况下,OpenJ9在内存消耗方面更有效,并且在这方面也可以进一步调整。

Use 64 bit Java on a 64 bit OS似乎在这里给出了不正确的可能性,因为64位Java VM可以处理更多内存,但是比同等32位VM的内存效率更低。


0
投票

你有太少的记忆可用于日食。最好的是用更多ram升级你的系统。

除非你有充分的理由不在不使用虚拟盒子的情况下直接在windows下使用eclipse。如果你必须使用Ubuntu考虑使用32位版本的Ubuntu和Java和eclipse,或者在Windows旁边安装Ubuntu,这样你就可以启动它并拥有所有内存。

© www.soinside.com 2019 - 2024. All rights reserved.