[英]How to reduce JVM virtual memory usage?
我有一個Java程序可以在具有2GB物理內存和2GB交換的Solaris 10 X86上運行。
該程序在Linux 64位運行良好,它只消耗大約450MB內存。
但是當它在Solaris中運行時,它總是報告OutOfMemoryError,我注意到在錯誤發生之前,它試圖使用> 4GB的虛擬內存,這在32位系統上絕對不可能。
那么為什么JVM會嘗試使用那么多的虛擬內存呢? 有沒有辦法告訴JVM不要使用那么多的虛擬內存?
謝謝。
編輯:
感謝大家的意見! 這是完整的錯誤消息:
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 32756 bytes for ChunkPool::allocate
# 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 (allocation.cpp:211), pid=1052, tid=16
#
# JRE version: 6.0_26-b03
# Java VM: Java HotSpot(TM) Server VM (20.1-b02 mixed mode solaris-x86 )
--------------- T H R E A D ---------------
Current thread (0x081a3400): JavaThread "C2 CompilerThread1" daemon
您可能正在將參數傳遞給JVM,使其使用這么多內存。
根據確切的錯誤 - 是堆空間問題還是permgen空間問題? - 將參數傳遞給jvm,例如-Xms512m和-Xmx512m,或-XX:PermSize = 128m和-XX:MaxPermSize = 128m,可能會解決您系統上的問題。
嘗試設置jvm param -Xmx1g
以限制最多1千兆字節的使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.