前段时间下了et项目,启动jBoss的时候出现了一个问题,查了一下,发现是jBoss配置的JVM启动参数有问题。后来发现很多人都遇到过类似的问题。因此,在网上学习了相关资料以后,总结如下,希望以后对大家类似问题的查错能够有点用。
一:JVM启动参数共分为三类:
其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
其二是非标准参数(-X),指的是JVM底层的一些配置参数,这些参数在一般开发中默认即可,不需要任何配置。但是在生产环境中,并不保证所有jvm实现都满足,所以为了提高性能,往往需要调整这些参数,以求系统达到最佳性能。另外这些参数不保证向后兼容,也即是说“如有变更,恕不在后续版本的JDK通知”(这是官网上的原话);
其三是非Stable参数(-XX),这类参数在jvm中是不稳定的,不适合日常使用的,后续也是可能会在没有通知的情况下就直接取消了,需要慎重使用。
二:而JVM内存又可分为三个主要的域:
新域、旧域以及永久域。JVM生成的所有新对象放在新域中。一旦对象经历了一定数量的垃圾收集循环后,便进入旧域。而在永久域中是用来存储JVM自己的反射对象的,如class和method对象,而且GC(Garbage Collection)不会在主程序运行期对永久域进行清理。其中新域和旧域属于堆,永久域是一个独立域并且不认为是堆的一部分。
三:各主要参数的作用如下:
-Xms:设置jvm内存的初始大小
-Xmx:设置jvm内存的最大值
-Xmn:设置新域的大小(这个似乎只对 jdk1.4来说是有效的,后来就废弃了)
-Xss:设置每个线程的堆栈大小(也就是说,在相同物理内存下,减小这个值能生成更多的线程)
-XX:NewRatio :设置新域与旧域之比,如-XX:NewRatio = 4就表示新域与旧域之比为1:4
-XX:NewSize:设置新域的初始值
-XX:MaxNewSize :设置新域的最大值
-XX:MaxPermSize:设置永久域的最大值
-XX:SurvivorRatio=n:设置新域中Eden区与两个Survivor区的比值。(Eden区主要是用来存放新生的对象,而两个Survivor区则用来存放每次垃圾回收后存活下来的对象)
四:如何使用JVM参数:
非常的简单。举一个“HelloWorld”的例子
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println(”Hello World!”);
}
}
编译并运行:
D:\work>javac HelloWorld.java
D:\work>java -Xms256M -Xmx512M HelloWorld
Hello World!
这样就可以了。
而如果你要在J2EE环境中配置这些参数,那么你需要在J2EE应用服务器或者Servlet容器相关启动参数设置处指定,在其启动文件中来配置,Tomcat是在catalina.bat中配置,JBoss是在run.bat中配置,其他服务器就不说了。上网查一下就知道了
五:常见的错误:
java.lang.OutOfMemoryError相信很多开发人员都用到过,这个主要就是JVM参数没有配好引起的,但是这种错误又分两种:java.lang.OutOfMemoryError: Java heap space和java.lang.OutOfMemoryError: PermGen space,其中前者是有关堆内存的内存溢出,可以同过配置-Xms和-Xmx参数来设置,而后者是有关永久域的内存溢出,可以通过配置 -XX:MaxPermSize来设置。
如想了解更多的jvm启动参数:请查看官方网站:
http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/java.html
http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp
分享到:
相关推荐
1. **加载配置文件**:JVM启动时,首先会根据当前路径寻找配置文件`JVM.CFG`,这个文件包含了JVM的一些基础设置和配置选项。 2. **定位JVM执行文件**:在配置文件中找到执行文件`jvm.dll`的位置。`jvm.dll`是JVM的...
在Java中,通过`setDaemon()`方法可以设置线程是否为守护线程,该方法接受一个布尔值参数,`true`表示设置为守护线程,`false`则为非守护线程。 默认情况下,所有新创建的线程都是非守护线程。当所有的非守护线程...
### Hive工作调优小结 #### 一、Map阶段的优化(Map Phase) 在Hive中,Map任务的数量直接影响到整个Hive作业的性能。Map任务的数量由以下公式计算得出: \[ \text{num_Map_tasks} = \max[\text{Mapred.min.split...
首先,JVM在启动时会根据操作系统环境设定一些默认的区域属性,例如`user.language`、`user.region`和`file.encoding`。这些属性决定了JVM内部的默认字符编码。在英文操作系统上,如果希望JVM使用中文环境,可以通过...
这个类允许你指定命令行参数,包括可执行文件(Java虚拟机)和启动参数。例如,`ProcessBuilder.start()`方法会启动一个新的进程。如果需要在不同JVM之间通信,可以使用RMI(远程方法调用)、Socket编程或者通过共享...
### Java个人学习小结 #### Java发展史及重要里程碑 - **起源与发展**: Java 的起源可以追溯到 1992 年,当时的 Sun Microsystems 公司开发了一种名为 Oak 的编程语言,最初是为了家用电器的智能化而设计的。然而...
- `WebLogic`服务器的`suspend=n`参数表示启动后不会等待调试器连接,这使得服务器可以立即启动服务。 4. **使用手册.txt**和`远程调试方式启动.bat`: - `使用手册.txt`可能包含详细的操作步骤和注意事项,比如...
总的来说,优化Tomcat6的性能涉及到多个层面,包括选择合适的I/O模型、调整线程池参数、配置JVM内存以及启用和配置相关特性。通过对这些细节的深入理解和精细调整,可以显著提升Tomcat6处理高并发请求的能力,为用户...
### Java基础知识小结 #### 1.1 `getPath()`、`getAbsolutePath()`、`getCanonicalPath()`的区别 在Java中,处理文件路径时经常会用到`getPath()`、`getAbsolutePath()`以及`getCanonicalPath()`这三个方法。它们...
技术点83 解决任务的JVM 启动参数 13.2.4 高效调试的编码准则 技术点84 调试和错误处理 13.3 MapReduce 陷阱 技术点85 MapReduce 反模式 13.4 本章小结 附录A 相关技术 附录B Hadoop 内置的数据导入导出...
#### 五、小结 JConsole作为一个强大的工具,不仅能够帮助开发者和运维人员监控和管理正在运行的JVM,还能够在性能调优、故障排查等方面发挥重要作用。通过本文的介绍,希望能够帮助读者更好地理解和使用JConsole这...
快速小结: 1. 编译工作通过后台编译线程异步进行,不影响程序执行。 2. 编译线程数量应根据系统资源和应用需求进行调整。 3. 内联是优化性能的重要策略,尤其对减少方法调用开销有益。 4. 可以通过设置JVM参数来...
7.9.3 使用JVM启动参数注册转换器的问题 7.10 使用LTW织入切面 7.10.1 Spring的LoadTimeWeaver 7.10.2 使用LTW织入一个切面 7.10.3 在Tomcat下的配置 7.10.4 在其他Web应用服务器下的配置 7.11 小结 第3篇 数据访问...
7.9.3 使用JVM启动参数注册转换器的问题 7.10 使用LTW织入切面 7.10.1 Spring的LoadTimeWeaver 7.10.2 使用LTW织入一个切面 7.10.3 在Tomcat下的配置 7.10.4 在其他Web应用服务器下的配置 7.11 小结 第3篇 数据访问...
UML表示法小结中包括类图、顺序图、活动图和状态图,这些是理解面向对象设计的基础工具。而面向对象设计模式则是软件工程中解决特定问题的模板或通用解决方案。 在Java程序设计基础篇中,介绍了Java的基本概念,...
小结 Glassfish集群的搭建是一项技术含量较高的工作,涉及到服务器管理、网络配置、负载均衡等多个方面。通过理解并掌握上述步骤,你将能够成功构建一个高效、可靠的Glassfish集群,实现应用的高可用性和可扩展性。...
Tomcat 安装和配置 ...小结 本文详细介绍了 Tomcat 的安装和配置过程,包括环境变量设置、内存设置、字符集设置和启动、关闭 Tomcat 服务器。通过本文,读者可以快速掌握 Tomcat 的安装和配置技能。