`

内存设置详解

 
阅读更多

转自:http://developer.51cto.com/art/200906/127144.htm

 

在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步。

PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heap space:存放Instance。

GC(Garbage Collection)应该不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误

Java Heap分为3个区
1.Young
2.Old
3.Permanent

Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象,本文不讨论该区。

JVM的Heap分配可以使用-X参数设定,

-Xms
初始Heap大小

-Xmx
java heap最大值

-Xmn
young generation的heap大小

JVM有2个GC线程
第一个线程负责回收Heap的Young区
第二个线程在Heap不足时,遍历Heap,将Young 区升级为Older区

Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能。
为什么一些程序频繁发生GC?

有如下原因:
1.程序内调用了System.gc()或Runtime.gc()。
2.一些中间件软件调用自己的GC方法,此时需要设置参数禁止这些GC。
3.Java的Heap太小,一般默认的Heap值都很小。
4.频繁实例化对象,Release对象 此时尽量保存并重用对象,例如使用StringBuffer()和String()。

如果你发现每次GC后,Heap的剩余空间会是总空间的50%,这表示你的Heap处于健康状态,许多Server端的Java程序每次GC后最好能有65%的剩余空间

经验之谈:

1.Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx的1/3。
2.一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成。

注意:

1.增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间。并且GC运行时,所有的用户线程将暂停,也就是GC期间,Java应用程序不做任何工作。
2.Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等。

Stack的设定
每个线程都有他自己的Stack。

-Xss
每个线程的Stack大小

Stack的大小限制着线程的数量。如果Stack过大就好导致内存溢漏。-Xss参数决定Stack大小,例如-Xss1024K。如果Stack太小,也会导致Stack溢漏。

硬件环境

硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量。
如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC。这种情况你可以增加机器的内存,来减少Swap空间的使用。

4种GC

1、第一种为单线程GC,也是默认的GC,该GC适用于单CPU机器。
2、第二种为Throughput GC,是多线程的GC,适用于多CPU,使用大量线程的程序。第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程。-XX:+UseParallelGC参数启动该GC。
3、第三种为Concurrent Low Pause GC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时,运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。
4、第四种为Incremental Low Pause GC,适用于要求缩短因GC造成程序停滞的时间。这种GC可以在Young区回收的同时,回收一部分Old区对象。-Xincgc参数启动该GC。

单文件的JVM内存进行设置

默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError。
设置jvm内存的方法,对于单独的.class,可以用下面的方法对Test运行时的jvm内存进行设置。
java -Xms64m -Xmx256m Test
-Xms是设置内存初始化的大小
-Xmx是设置最大能够使用内存的大小(最好不要超过物理内存大小)

tomcat启动jvm内存设置

Linux:

在/usr/local/apache-tomcat-5.5.23/bin目录下的catalina.sh添加:JAVA_OPTS='-Xms512m -Xmx1024m'要加“m”说明是MB,否则就是KB了,在启动tomcat时会报内存不足。
-Xms:初始值
-Xmx:最大值
-Xmn:最小值Windows
在catalina.bat最前面加入
set JAVA_OPTS=-Xms128m -Xmx350m 如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,就是说set JAVA_OPTS=-Xms128m -Xmx350m 没起作用.上面分配200M内存就OOM了..windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.解决办法:

修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions

原值为

-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs加入 -Xms300m -Xmx350m

重起tomcat服务,设置生效

weblogic启动jvm内存设置

在weblogic中,可以在startweblogic.cmd中对每个domain虚拟内存的大小进行设置,默认的设置是在commEnv.cmd里面。

JBoss

默认可以使用的内存为64MB
$JBOSSDIR$/bin/run.config
JAVA_OPTS = "-server -Xms128 -Xmx512"

Eclipse

在所在目录下,键入
eclipse.exe -vmargs -Xms256m -Xmx512m
256m表示JVM堆内存最小值
512m表示JVM堆内存最大

Websphere

进入控制台去设置:应用程序服务器 > server1 > 进程定义 > Java 虚拟机

分享到:
评论

相关推荐

    Tomcat内存设置详解

    ### Tomcat内存设置详解 #### 引言 在构建高性能且稳定的Web应用时,合理配置Tomcat内存参数是至关重要的一步。Tomcat作为一款广泛使用的开源应用服务器,其性能受到诸多因素的影响,其中内存配置尤为关键。正确的...

    如何设置电脑虚拟内存,电脑虚拟内存设置多少最合理?.docx

    "电脑虚拟内存设置详解" 在计算机系统中,虚拟内存(Virtual Memory)是一种重要的技术,它可以缓解 CPU 运行的压力,提高系统的性能。虚拟内存是指将一部分硬盘空间分配出来作为内存使用,弥补物理内存的不足。接...

    谈谈虚拟内存如何设置为好

    虚拟内存设置详解 虚拟内存是计算机系统中的一种重要组件,它可以帮助系统在内存不足的情况下继续运行。但是,虚拟内存的设置却经常被忽视,许多人认为系统默认的设置就是最好的。实际上,虚拟内存的设置对系统的...

    嵌入式Linux内存与性能详解

    本资源《嵌入式Linux内存与性能详解》详细阐述了这些关键领域,为理解嵌入式系统的内在机制提供了深入见解。 1. **嵌入式系统概述**:嵌入式系统通常具有特定功能,它们在硬件限制下运行,如处理能力、内存大小和...

    怎么将虚拟内存设置从C盘换到D盘借鉴.pdf

    "虚拟内存设置详解" 虚拟内存是计算机系统中的一种技术,它可以将部分硬盘空间用作内存,提高系统的性能。但是,虚拟内存的设置需要小心,因为它可能会影响系统的稳定性。在这里,我们将详细介绍如何将虚拟内存设置...

    WindowsXP虚拟内存的设置方法.docx

    ### Windows XP 虚拟内存设置详解 #### 一、虚拟内存的概念与作用 在讨论如何设置Windows XP的虚拟内存之前,我们首先需要了解什么是虚拟内存及其重要性。虚拟内存是一种计算机技术,它允许操作系统使用一部分硬盘...

    Windows P虚拟内存的设置方法.doc

    【Windows XP 虚拟内存设置详解】 虚拟内存是Windows操作系统中的一项重要功能,它扮演着辅助物理内存的角色,当物理内存不足时,系统会利用硬盘空间作为临时内存,以应对程序运行的需求。Windows XP中,虚拟内存是...

    嵌入式Linux内存与性能详解-史子旺

    《嵌入式Linux内存与性能详解》一书由史子旺撰写,专注于深入解析Linux内存管理机制以及如何在嵌入式环境中优化系统性能。Linux内存管理是操作系统的核心部分,理解和掌握这一领域对于开发者来说至关重要,尤其是在...

    DDR内存时序设置详解

    ### DDR内存时序设置详解 #### 导言 在计算机硬件领域中,内存作为系统的重要组成部分,其性能直接影响着整个平台的表现。其中,DDR(Double Data Rate SDRAM)内存因其高效的数据传输特性而广泛应用于现代计算机...

    虚拟内存的设置.docx

    ### 虚拟内存设置详解 #### 一、虚拟内存概念及作用 **虚拟内存**是一种计算机技术,通过将部分硬盘空间用作内存使用,以此扩展物理内存的限制。当系统的物理内存(RAM)不足时,虚拟内存可以作为后备存储区,将...

    易语言读写内存操作详解

    易语言读写内存操作详解 易语言读写内存操作是一种高级的编程技术,能够让开发者直接访问和操作内存中的数据。本文将详细介绍易语言读写内存操作的函数原型、参数说明、易语言中的参数说明、读写内存的步骤和示例...

    Java内存模型详解

    ### Java内存模型详解 #### 1. JMM简介 ##### i. 内存模型概述 Java内存模型(Java Memory Model, JMM)是Java虚拟机(JVM)的一部分,用于规定程序中的各种变量(包括实例字段、静态字段和数组元素等)在多个...

    完整的内存详解

    内存(RAM)是计算机系统中至关重要的组成部分,它负责临时存储CPU在运算过程中需要用到的数据和指令。内存的主要功能包括为CPU提供快速数据存取,从而减少数据访问时间,提升系统整体性能。 ### 内存类型和特性 ...

    tomcat启动内存设置[参考].pdf

    ### Tomcat启动内存设置详解 #### 一、Tomcat与JVM内存管理基础 Tomcat作为一款广泛使用的Java应用服务器,其性能优化至关重要。而内存管理则是Tomcat性能调优的关键之一。合理设置Tomcat的启动内存对于提高系统的...

    Resin服务器配置指南 详解.docx

    #### 二、Resin 虚拟内存设置详解 Resin 作为 Java 应用服务器,其性能很大程度上取决于 JVM(Java Virtual Machine)的配置,特别是虚拟内存的设置。合理的内存配置能够显著提升 Resin 的运行效率和稳定性。 **1....

    虚拟内存的详解

    这个是关于合理设置虚拟内存的详细论述,通过该文档的查阅,可以让初学者在很快的时间内搞明白这个问题

Global site tag (gtag.js) - Google Analytics