簡體   English   中英

如何減少JVM虛擬內存的使用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM