-Xmn512m -Xms1024m -Xmx1024m
在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步。
PermGen space:全称是PermanentGenerationspace.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heapspace:存放Instance。
GC(GarbageCollection)应该不会对PermGenspace进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGenspace错误
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、第二种为ThroughputGC,是多线程的GC,适用于多CPU,使用大量线程的程序。第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程。-XX:+UsellelGC参数启动该GC。
3、第三种为Concurrent LowPauseGC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时,运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。
4、第四种为Incremental LowPauseGC,适用于要求缩短因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服务,上面的设置就不生效了,就是说setJAVA_OPTS=-Xms128m-Xmx350m没起作用.上面分配200M内存就OOM了..windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.解决办法:
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache SoftwareFoundation\TomcatService Manager\Tomcat5\meters\JavaOptions
原值为
-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat5.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 虚拟机
发表评论
-
winsw 服务权限获取
2021-11-28 08:55 622@echo off @echo 取得当前目录 pushd ... -
davinci mail配置
2021-11-09 23:31 570mail: host: smtp.126.com ... -
davinci启动过程中的坑
2021-11-09 23:16 5431、设置MainClass 首先,在configurati ... -
启动项目设置字符集
2021-11-06 10:39 534启动时指定编码格式,-Dfile.encoding=utf-8 ... -
mysql 设置root权限
2021-07-08 09:36 1958mysql> CREATE USER 'root'@' ... -
修改数据表和字段字符集
2021-06-07 17:33 1991-- 修改数据表和字段字符集 alter table t ... -
查看端口关闭端口
2021-05-31 11:53 1237netstat -aon|findstr "80 ... -
maven不能设置为Dynamic Web Module3.0解决方法
2017-10-13 11:25 812找到\项目名\.setting\文件夹下的 org.e ... -
solr部署
2012-06-13 09:53 1626前提: 1.装好JRE和JDK,设置环境变量 ... -
spring的ioc类图
2012-01-05 08:05 1483spring在ioc的两个体现:一个是BeanFactory, ... -
java mail 发邮件
2010-10-28 10:07 975import java.util.Date;impor ... -
Jboss自启动和优化+解决captcha在linux下不显示
2009-10-13 16:45 3336解决captcha在linux下不显示: 提示信息:& ... -
Linux上jboss集群配置
2009-10-13 16:44 1740集群安装和配置 on Linux 环境 2台Redhat s ... -
JAVA中文字符编码问题详解(3)
2009-10-13 14:59 3135五、对URL做Encode和Deco ... -
JAVA中文字符编码问题详解(2)
2009-10-13 14:57 2371四、JSP读取request.getParameter里的中文 ... -
JAVA中文字符编码问题详解(1)
2009-10-13 14:50 2509JAVA中文字符编码问题详 ...
相关推荐
JVM 如何设置虚拟内存?在 JVM 中,如果 98%的时间是用于 GC 且可用的 Heap size 不足 2%的时候将抛出内存溢出异常信息。Heap Size 最大不要超过可用物理内存的 80%,一般的要将 Xmx 和 Xms 设置相同避免每次 GC ...
jdk 内存设置 jdk 内存设置是 Java 开发中非常重要的一部分。它直接影响着 Java 应用程序的性能和稳定性。jdk 内存设置主要包括堆大小设置、垃圾收集器的选择和配置等几个方面。 堆大小设置是 jdk 内存设置的核心...
在特定环境下,例如文中提到的Windows Server 2003系统,具有3.5GB物理内存且使用JDK5.0的情况下,JVM的最大堆内存设置可达1478MB。 ##### 2. 典型设置 在进行JVM的内存设置时,有几个关键参数需要特别注意: - *...
"JVM内存设置" JVM内存设置是一个非常重要的概念,它关系到Java应用程序的性能和稳定性。在这篇文章中,我们将讨论JVM如何使用AIX平台上的本机内存,了解Java堆的概念、OutOfMemoryError的原因和调试方法。 首先,...
JVM是运行Java字节码的虚拟计算机,为Java提供了一个跨平台的环境,确保Java程序可以在不同的操作系统上运行而无需修改代码。本文将详细探讨这些概念: 1. JVM原理:JVM的工作原理涉及类加载器(ClassLoader)、类...
初始化零值后,虚拟机要对对象进行必要的设置,这个对象是那个类的实例,如果才能找到类的元数据信息、对象的哈希码、对象的 gc 分代年龄等信息,这些信息都放在了对象的对象头 object header 中。 六、对象头...
2. 修改 `setDomainEnv.cmd` 文件中的 `MEM_ARGS`,设置 `Xms` 参数来调整虚拟内存配置。 关于内存参数设置的疑问解答: 有时,设置 `-Xms` 和 `-Xmx` 不同会导致WebLogic只使用初始的 `-Xms` 内存大小,而不会...
【标题】:Tomcat虚拟内存 【描述】:在Java应用程序服务器中,Tomcat作为流行的开源Web服务器,其性能很大程度上取决于如何配置虚拟内存。Java虚拟机(JVM)是运行Tomcat的基础,它管理着应用程序的内存需求,包括...
### Java虚拟内存研究 #### 内存溢出的分析与解决方法 在现代软件开发中,尤其是使用Java语言开发的企业级应用中,内存管理和优化是一个非常关键的技术领域。内存溢出(Out Of Memory, OOM)是导致Java应用程序...
在这个项目中,我们关注的是JVM如何进行虚拟内存管理,特别是在JDK 6.2版本中的实现。虚拟内存管理是操作系统的重要组成部分,它允许程序使用比实际物理内存更大的地址空间,并在需要时动态地将部分数据交换到磁盘上...
首先,`vmmap`是Apple提供的命令行工具,用于显示进程的虚拟内存映射。通过这个工具,我们可以查看JVM进程中的堆、栈、元空间、代码缓存等各个内存区域的使用情况,包括大小、分配、驻留页等信息。 1. **JVM内存...
Java-JVM内存规范(详细完整思维导图),包含物理内存与虚拟内存、内核空间与用户空间、java中需要使用的内存组件、jvm内存结构、jvm内存回收策略、JVM参数等...
处理器的寄存器大小、物理内存的大小以及虚拟内存的管理都会影响JVM的性能。例如,处理器的位数限制了它可以寻址的内存大小。现代计算机系统广泛使用32位和64位架构,后者因为更大的寻址空间而具有优势。 随着硬件...
在Java应用开发和部署过程中,合理设置JVM的内存参数对于提高应用的稳定性和性能至关重要。不适当的内存配置可能导致频繁的垃圾回收(GC),甚至出现OutOfMemoryError,严重影响应用的响应时间和用户体验。 ### ...
2. **虚拟内存**:Linux通过虚拟地址空间为每个进程提供了独立的4GB(32位系统)或128GB(64位系统)内存空间。这包括了堆、栈、代码、数据和共享库等区域。 - **堆**:动态分配内存的地方,由`malloc`和`calloc`等...
例如,对于堆溢出,可以适当增大`-Xms`和`-Xmx`的值,但需要注意的是,JVM堆的大小受到操作系统环境的影响,包括32位与64位系统的差异、可用虚拟内存和物理内存的限制。因此,配置时需要结合服务器的实际内存资源...
综上所述,面向对象是一种编程范式,而JVM内存模型则是运行Java程序的虚拟环境的一部分,它们共同保证了Java程序的运行效率和稳定性。开发者在编写Java代码时,需要理解这些基本概念,并能够合理地使用面向对象的...