java -Xms -Xmx -XX:PermSize -XX:MaxPermSize

忘是亡心i 2022-06-18 00:28 290阅读 0赞

在做java开发时尤其是大型软件开发时经常会遇到内存溢出的问题,比如说OutOfMemoryError等。这是个让开发人员很痛苦、也很纠结的问题,因为我们有时不知道什么样的操作导致了这种问题的发生。所以我们不得不通过不断的优化自己的代码结构,重构了一次又一次。虽然说不断的重构自己的代码对公对私都是一件非常好的事,但是有时我们会发现有些时候不单单是通过重构自身的代码就能够解决这样的问题,因为也可能是由于我们对java虚拟机运行时的内存分配的不得当导致了内存溢出现象的不断发生。为了解决这一问题,java开发团队提供了一个用户自定义的方式按需配置java虚拟机运行时的所需的内存——通过参数配置的形式实现参数分配自定义化。
在解析如何通过参数来配置JVM运行时内存分配之前,要说明一下JVM运行时内存的格局。

  1. JVM按照其存储数据的内容将所需内存分配为堆区与非堆区两个部分:所谓堆区即为通过new的方式创建的对象(类实例)所占用的内存空间;非堆区即为代码、常量、外部访问(如文件访问流所占资源)等。然而虽然[Java][]的垃圾回收机制虽然能够很好的解决内存浪费的问题,但是这种机制也仅仅的是回收堆区的资源,而对于非堆区的资源就束手无策了,针对这样的资源回收只能凭借开发人员自身的约束来解决。就算是这样(堆区有java回收机制、非堆区开发人员能够很好的解决),当运行时所需内存瞬间激增的时候JVM无奈的也要中止程序的运行。所以本文讲述的是如何解决后者的问题。
  2. 好了,说了这么多是时候讲一下配置JVM内存的几种参数及其如何使用了。
  3. 首先,常见参数种类(配置内存):(-Xms 、-Xmx、-XX:newSize、-XX:MaxnewSize、-Xmn)、(-XX:PermSize、-XX:MaxPermSize)。可以从列举的方式上看出我的用意,参数的配置是分组的,前者是用来配置堆区的,后者是用来配置非堆区的。
  4. 第一组配置参数:-Xms 、-Xmx、-XX:newSize、-XX:MaxnewSize、-Xmn
  5. 1、-Xms :表示java虚拟机堆区内存初始内存分配的大小,通常为操作系统可用内存的1/64大小即可,但仍需按照实际情况进行分配。有可能真的按照这样的一个规则分配时,设计出的软件还没有能够运行得起来就挂了。
  6. 2、-Xmx 表示java虚拟机堆区内存可被分配的最大上限,通常为操作系统可用内存的1/4大小。但是开发过程中,通常会将 -Xms -Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源。
  7. 一般来讲对于堆区的内存分配只需要对上述两个参数进行合理配置即可,但是如果想要进行更加精细的分配还可以对堆区内存进一步的细化,那就要用到下面的三个参数了-XX:newSize、-XX:MaxnewSize、-Xmn。当然这源于对堆区的进一步细化分:新生代、中生代、老生代。java中每新new一个对象所占用的内存空间就是新生代的空间,当java垃圾回收机制对堆区进行资源回收后,那些新生代中没有被回收的资源将被转移到中生代,中生代的被转移到老生代。而接下来要讲述的三个参数是用来控制新生代内存大小的。
  8. 1、-XX:newSize:表示新生代初始内存的大小,应该小于 -Xms的值;
  9. 2、-XX:MaxnewSize:表示新生代可被分配的内存的最大上限;当然这个值应该小于 -Xmx的值;
  10. 3、-Xmn:至于这个参数则是对 -XX:newSize、-XX:MaxnewSize两个参数的同时配置,也就是说如果通过-Xmn来配置新生代的内存大小,那么-XX:newSize = -XX:MaxnewSize = -Xmn,虽然会很方便,但需要注意的是这个参数是在JDK1.4版本以后才使用的。
  11. 上面所述即为java虚拟机对外提供的可配置堆区的参数,接下来讲述java虚拟机对非堆区内存配置的两个参数:
  12. 1、-XX:PermSize:表示非堆区初始内存分配大小,其缩写为permanent size(持久化内存)
  13. 2、-XX:MaxPermSize:表示对非堆区分配的内存的最大上限。
  14. 这里面非常要注意的一点是:在配置之前一定要慎重的考虑一下自身软件所需要的非堆区内存大小,因为此处内存是不会被java垃圾回收机制进行处理的地方。并且更加要注意的是 最大堆内存与最大非堆内存的和绝对不能够超出[操作系统][Link 1]的可用内存。

转载地址:http://blog.chinaunix.net/uid-26863299-id-3559878.html

参考文档:http://blog.csdn.net/crazy_kis/article/details/7535932

附:

三、实例,以下给出4G内存环境下java jvm 的参数设置参考:
None.gif
None.gif

[html] view plain copy

  1. rem ——- Execute The Requested Command ———————————————————-
  2. set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx2048m -XX:MaxNewSize=1024m -XX:PermSize=512M -XX:MaxPermSize=2048m
  3. echo Using CATALINA_BASE: “%CATALINA_BASE%”
  4. echo Using CATALINA_HOME: “%CATALINA_HOME%”
  5. echo Using CATALINA_TMPDIR: “%CATALINA_TMPDIR%”

None.gif
None.gif三、相关资料
None.gif
None.gifhttp: // www.tot.name/show/3/7/20061112220131.htm
None.gif
None.gifhttp: // www.tot.name/show/3/7/20061112220054.htm
None.gif
None.gifhttp: // www.tot.name/show/3/7/20061112220201.htm
None.gif
None.gif题外话:经常看到网友抱怨tomcat的性能不如dot.gif,不稳定等,其实根据笔者几年的经验,从 “ 互联星空“到现在的房产门户网,我们
None.gif 均使用tomcat作为WEB服务器,每天访问量百万多,tomcat仍然运行良好。建议大家有问题多从自己程序入手,多看看java的DOC文档
None.gif并详细了解JVM的知识。这样开发的程序才会健壮。
None.gif
None.gifJVM 性能调整的一些基本概念
None.gifhttp: // www.wujianrong.com/archives/2007/02/jvm_1.html#more
None.gif apache + Tomcat负载平衡设置详解
None.gif
None.gifhttp: // www.wujianrong.com/archives/2006/11/apachetomcat.html
None.gif java - the Java application launcher
None.gif
None.gifhttp: // java.sun.com/j2se/1.3/docs/tooldocs/linux/java.html
None.gif
None.gifJVM调优
None.gifhttp: // www.wujianrong.com/archives/2006/11/jvm.html

发表评论

表情:
评论列表 (有 0 条评论,290人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Xms Xmx Xss 释义

    Xms 是指设定程序启动时占用内存大小。一般来讲,大点,程序会启动的快一点,但是也可能会导致机器暂时间变慢。 Xmx 是指设定程序运行期间最大可占用的内存大小。如果程序运行需

    相关 Xms Xmx

    -Xms2048m -Xmx2048m -Xss1024K -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m 堆内存分配:

    相关 tomcat 内存配置优化 Xms Xmx

    简介 考虑一下这种场景,你开发了一个应用,它有十分优秀的布局设计,最新的特性以及其它的优秀特点。但是在性能这方面欠缺,不管这个应用如何都会遭到客户拒绝。客户总是期望它们的