我有一个带有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虚拟机进程内存不足。
您可以做多种可能性。在我看来,如果你想保持流程的当前限制,以下可能性最有希望:
-Xmx
/ -Xms
):
在eclipse.ini
,可能有像-Xmx1024m
这样的线,你可以用例如-Xmx640m
代替。尝试哪个最大堆空间仍足以满足您的需求。确保-Xms
不大于-Xmx
。Use 64 bit Java on a 64 bit OS
似乎在这里给出了不正确的可能性,因为64位Java VM可以处理更多内存,但是比同等32位VM的内存效率更低。
你有太少的记忆可用于日食。最好的是用更多ram升级你的系统。
除非你有充分的理由不在不使用虚拟盒子的情况下直接在windows下使用eclipse。如果你必须使用Ubuntu考虑使用32位版本的Ubuntu和Java和eclipse,或者在Windows旁边安装Ubuntu,这样你就可以启动它并拥有所有内存。