### 设置JVM内存的方法 #### 一、引言 在Java应用程序开发与部署的过程中,合理的JVM内存配置至关重要。不合适的内存配置不仅可能导致应用程序性能下降,还可能引发一系列的内存溢出错误,如`OutOfMemoryError`。本文将详细介绍如何为Java虚拟机(JVM)设置内存参数,以及在不同场景下进行有效配置的方法。 #### 二、JVM内存参数详解 1. **-Xms (Initial heap size)**: - **含义**: 设置JVM启动时的初始堆内存大小。 - **重要性**: 合适的初始内存大小有助于减少垃圾回收(GC)的频率,提高应用性能。 2. **-Xmx (Maximum heap size)**: - **含义**: 设置JVM的最大堆内存大小。 - **重要性**: 当应用程序使用的内存接近-Xmx指定的值时,JVM会尝试执行垃圾回收。如果仍然无法释放足够的内存空间,则会抛出`OutOfMemoryError`异常。 3. **其他相关参数**: - **-Xmn (Young generation size)**: 设置新生代内存大小。 - **-XX:NewRatio** 和 **-XX:NewSize** 及 **-XX:MaxNewSize**: 控制老年代与新生代的比例及大小。 - **-XX:+UseParallelGC**: 使用并行垃圾收集器。 #### 三、不同环境下JVM内存配置方法 1. **Windows环境下的Tomcat服务器配置**: - **catalina.bat**: - 修改`catalina.bat`文件,在`rem Guess CATALINA_HOME if not defined`这一行的下面添加: ```bat set JAVA_OPTS=-Xms128m -Xmx256m ``` - **注册表修改**: - 对于安装版的Tomcat,可以通过修改注册表来设置JVM参数。路径为: ```reg HKEY_LOCAL_MACHINE\SOFTWARE\ApacheSoftwareFoundation\TomcatServiceManager\Tomcat5\Parameters\JavaOptions ``` - **MyEclipse中的Tomcat配置**: - 在MyEclipse中,需要通过窗口->首选项->MyEclipse->Application Servers->Tomcat->Tomcat5.x->JDK->Optional Java VM arguments进行配置: ```bat -Xms128m -Xmx256m -Dcom.sun.management.jmxremote=true ``` 2. **Unix/Linux环境下的Tomcat服务器配置**: - **catalina.sh**: - 在`catalina.sh`文件中加入: ```sh JAVA_OPTS="-Xms128m -Xmx256m" ``` - **直接命令行执行**: - 直接在命令行中启动JVM时,可以使用以下格式: ```sh java -Xms64m -Xmx1024m cn.neto.Test ``` 3. **其他应用服务器的JVM内存配置**: - **WebLogic**: - 修改`startWebLogic.cmd`或`startWebLogic.sh`文件中的JVM参数,例如: ```sh java -Xms64m -Xmx512m -jar weblogic.jar ``` #### 四、案例分析 假设在一个项目中,由于引入了大量第三方库导致内存占用较高,经常出现`OutOfMemoryError`异常。此时,可以根据项目实际需求调整JVM内存配置: - **初步诊断**: - 首先检查当前的JVM内存配置是否合理。 - 使用工具如VisualVM来监控JVM内存使用情况。 - **配置调整**: - 根据实际情况增加-Xms和-Xmx的值。 - 例如,可以将-Xms和-Xmx都设置为256m,以满足基本的需求。 - **效果验证**: - 重新启动应用并观察内存使用情况。 - 如果内存使用稳定且不再出现异常,则说明配置合理。 #### 五、总结 合理地设置JVM内存参数对于避免内存溢出、提升应用程序性能至关重要。通过对不同场景下的JVM内存配置方法进行了解和实践,可以有效地优化Java应用程序的表现,确保其稳定运行。此外,根据项目的实际需求灵活调整内存参数,也是提升开发效率的重要手段之一。
/tomcat/bin/catalina.bat 加上下面的命令:
set JAVA_OPTS=-Xms32m -Xmx256m
假如你用unix/linux
/tomcat/bin/catalina.sh 加上下面的命令:
JAVA_OPTS="-Xms32m -Xmx256m"
tomcat分为安装和压缩包形式,安装的情况catalina.bat设定、使用系统服务不会生效,而是存储在注册表中,位置是HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions 修改时视情况而定。
启动MyEclipse启动Tomcat无视catalina.bat中设置内存大小的问题。
在tomcat的catalina.bat中设置set JAVA_OPTS=-Xms128m -Xmx256m,直接使用startup.bat启动tomcat没有问题。但是在myeclipse中配置tomcat后,通过myeclipse启动就出现内存溢出,之前在catalina.bat中设置的内存似乎没有作用。
解决方法:窗口->首选项->MyEcliipse->Application Servers->Tomcat->Tomcat5.x->JDK->Optional Java VM arguments中填写一下内容。
-Xms128m -Xmx256m
-Dcom.sun.management.jmxremote=true
内存具体大小视具体情况制定。
在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的 1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。
jvm虚拟机的默认Heap大小是64M,可以通过设置其最大值-Xmx和初始值-Xms来实现.
(1).可以在windows 更改系统环境变量:JAVA_OPTS=-Xms64m -Xmx512m (针对catalina.bat )
(2). 命令行执行的时候:java -Xms64m -Xmx1024m cn.neto.Test
(a).tomcat:在windows下:可以在C:\tomcat5.5.9\bin\catalina.bat 中加上: set JAVA_OPTS=-Xms64m -Xmx256m
位置在 rem Guess CATALINA_HOME if not defined 这行的下面加合适.
在linux下:在{tomcat_home}/bin/catalina.sh的前面,加 set JAVA_OPTS='-Xms64 -Xmx512'
(b).tomcat如果是安装版的,更改tomcat5w.exe中的java选项卡下的initial memory pool 和 maximum memory pool
(c). weblogic: 在startWeblogic.cmd(windows)/startWeblogic.sh(unix/linux)中调节
Java虚拟机默认分配64M内存,如果你的应用比较大,超出64M内 存,Java虚拟机就会抛出outOfMemoryError,并停止运行。不管是什么应用(Web应用、Application等),只需要修改你的机 器上的运行Java命令,在javaxxx命令中添加-Xms(最小使用内存)、-Xmx(最大使用内存)即可解决。当然,这儿的内存容量都是指物理内 存,不能超出你的机器的物理内存的总容量。
对于单独的.class,可以用下面的方法对Test运行时的jvm内存进行设置。
java -Xms64m -Xmx256m Test
-Xms是设置内存初始化的大小
-Xmx是设 置最大能够使用内存的大小(最好不要超过物理内存大小)
在eclipse中的设置方法
方法1:对应在Eclipse中的设置为:窗口->首选项->JAVA->已安装的JRE,在缺 省的VM自变量中增加: 如-Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
方法2:修改eclipse.ini
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
这里有几个问题:
1. 各个参数的含义什么?
2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动?
剩余7页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于SimPy和贝叶斯优化的流程仿真系统.zip
- (源码)基于Java Web的个人信息管理系统.zip
- (源码)基于C++和OTL4的PostgreSQL数据库连接系统.zip
- (源码)基于ESP32和AWS IoT Core的室内温湿度监测系统.zip
- (源码)基于Arduino的I2C协议交通灯模拟系统.zip
- coco.names 文件
- (源码)基于Spring Boot和Vue的房屋租赁管理系统.zip
- (源码)基于Android的饭店点菜系统.zip
- (源码)基于Android平台的权限管理系统.zip
- (源码)基于CC++和wxWidgets框架的LEGO模型火车控制系统.zip