`

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

 
阅读更多

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

分享到:
评论

相关推荐

    JVM调优总结 Xms -Xmx -Xmn -Xss

    JVM调优总结 -Xms -Xmx -Xmn -Xss JVM调优总结 -Xms -Xmx -Xmn -Xss

    Android面试题

    Android面试题

    tomcat常用功能的配置

    1,修改tomcat的JDK目录 2,增加虚拟目录 3,GET方法URL乱码问题解决 4,虚拟主机配置 等等

    修改JVM内存

    TOMCAT JVM JAVA 内存 更改JVM 内存大小 TOMCAT JVM 更改 TOM

    认识 java JVM虚拟机选项 Xms Xmx PermSize MaxPermSize 区别

    关于内存溢出报错的处理及解决方案: java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemory 堆内存、非堆内存都描述

    Linux和Windows中tomcat修改内存大小的方法

    实例,以下给出1G内存环境下java jvm 的参数设置参考: 代码如下:JAVA_OPTS=”-server -Xms800m -Xmx800m -XX:PermSize=64M-XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true ”JAVA_OPTS=”-...

    JRebel Agent 6.3.0破解版

    -server -Xms512m -Xmx512m -XX:PermSize=192M -XX:MaxPermSize=192M -noverify -javaagent:D:\Tools\apache-tomcat-8.0.46\lib\jrebel.jar -Drebel.disable_update=true 我是分割线|END|------------------------...

    kafka集群监控之KafkaOffsetMonitor 0.4.6版本地化(实测)

    java -Xms512M -Xmx512M -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m \ -cp KafkaOffsetMonitor-assembly-0.4.6-zjz.jar \ com.quantifind.kafka.offsetapp.OffsetGetterWeb \ --offsetStorage kafka \ -...

    扩大Tomcat内存

    方法二:环境变量中设 变量名:JAVA_OPTS 变量值:-Xms1024M -Xmx1024M -XX:PermSize=256M -XX:MaxNewSize=256M -XX:MaxPermSize=256M 方法三:前两种方法针对的是bin目录下有catalina.bat的情况,但是有些安装...

    jboss-4.2.3.GA.rar

    -Xms256M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M

    Tomcat+Mysql高并发配置优化讲解

    setJAVA_OPTS=-server -Xms1024m -Xmx2048m -Xss512K -XX:PermSize=128m-XX:MaxPermSize=256m setCATALINA_OPTS=-server -Xms512m -Xmx512m 如下图: Xms:初始内存 Xmx:最大内存 (2)更改Tomcat的Server.xml 在 ...

    更新上个angular版本问题 Kafka监控工具KafkaOffsetMonitor-assembly-0.4.6-SNAPSHOT.jar

    java -Xms512M -Xmx512M -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m \ -cp KafkaOffsetMonitor-assembly-0.4.6-SNAPSHOT.jar \ com.quantifind.kafka.offsetapp.OffsetGetterWeb \ --offsetStorage kafka...

    Tomcat内存溢出的三种情况及解决办法分析

    有一点需要注意:java -Xmx***M version 命令来测试的最大堆内存是 -Xmx与 -XX:PermSize的 和 比如系统支持最大的jvm堆大小事1.5G,那 -Xmx1024m -XX:PermSize=768M 是无法运行的。 第三种:无法创建新的线程。 ...

    java.lang.OutOfMemoryError解决办法

    报错 java.lang.OutOfMemoryError: PermGen space 报错 java.lang.OutOfMemoryError...JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true

    tomcat性能优化(性能总览)

    1.增加JVM堆内存大小 1)JVM通常不去调用垃圾回收器,所以服务器可以更... -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+DisableExplicitGC” -Xms – 指定初始化时化的栈内存

    详解Linux下Tomcat开启查看GC信息

    代码如下:JAVA_OPTS=’-Xms512m -Xmx4096m -XX:PermSize=64M -XX:MaxNewSize=128m -XX:MaxPermSize=64m -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -Xloggc:/usr/local/tomcat/logs/tomcat_gc.log’ ...

    java-JVM.zip_permsiz

    java JVM虚拟机选项: Xms Xmx PermSize MaxPermSize 区别

    WechatIMG97.png

    解决服务启动内存溢出,上面图片是本地tomcat配置 linux下需要在startup.sh中配置 JAVA_OPTS="-Xms2048m -Xmx2048m -Xmn1024m -XX:PermSize=512m -XX:MaxPermSize=1024m

    weblogic92 启动慢解决办法

    使用SUN JDK 启动时要很长时间,但启动启来weblogic正常. 特征见下面标红部分,时间很长. ...JAVA Memory arguments: -Xms 256m -Xmx512m -XX:CompileThreshold=8000 -XX:PermSize=48m -XX:MaxPermSize=128m

    你的java服务挂了吗

    问题背景 最近测试环境服务总是崩溃,...nohup java -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m -jar ${LUJING}/${NAME}/${NAME}.jar --spring.profiles.active=dev >${LUJING

Global site tag (gtag.js) - Google Analytics