在做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垃圾回收机制进行处理的地方。并且更加要注意的是 最大堆内存与最大非堆内存的和绝对不能够超出操作系统的可用内存。
————————————————
版权声明:本文为CSDN博主「阿龙学堂」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/superzyl/article/details/79077166

java -Xms -Xmx -XX:PermSize -XX:MaxPermSize 作用详解相关推荐

  1. JAVA(-Xms,Xmx,Xmn-XX:newSize,-XX:MaxnewSize,-XX:PermSize,-XX:MaxPermSize)区别

    1.-Xms:表示java虚拟机堆区内存初始内存分配的大小,通常为操作系统可用内存的1/64大小即可,但仍需按照实际情况进行分配. 2.-Xmx:表示java虚拟机堆区内存可被分配的最大上限,通常为操 ...

  2. java中static x 5_java中static作用详解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  3. -Xms -Xmx -XX:PermSize -XX:MaxPermSize 的理解和区别

    JVM按照其存储数据的内容将所需内存分配为堆区与非堆区两个部分: 所谓堆区即为通过new的方式创建的对象(类实例)所占用的内存空间: 非堆区即为代码.常量.外部访问(如文件访问流所占资源)等. 然而虽 ...

  4. 开发经验(三):堆栈内存设置Xms、Xmx、Permsize、MaxPermsize

    文章目录 一.概念扫盲 二.使用技巧 1)开发环境 2)生产环境 三.结论 一.概念扫盲 弄明白Xms.Xmx.Permsize.MaxPermsize这几个名词的设置,就不得不先弄明白Java程序运 ...

  5. java Xms Xmx

    目录 java Xms && Xmx -Xms和-Xmx java Xms && Xmx 在运行java的jar包时,经常使用的命令 nohup java -Xmx81 ...

  6. Java开源项目Hibernate包作用详解

    Java开源项目Hibernate包作用详解 本文引自:http://hi.baidu.com/nick6610/blog/item/70b58afa0d0eab9259ee90f7.html Jav ...

  7. java 拦截器顺序_Springmvc拦截器执行顺序及各方法作用详解

    实现HandlerInterceptor接口或者继承HandlerInterceptor的子类,比如Spring 已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInt ...

  8. java中sleep()、wait()相同与不同详解

    java中sleep().wait()相同与不同详解 相同 java中Thread#sleep和Object#wait方法都是暂停当前线程,当前线程让出CPU占用.并不存在调用sleep后还占用CPU ...

  9. Xposed源码剖析——app_process作用详解

    Xposed源码剖析--app_process作用详解 首先吐槽一下CSDN的改版吧,发表这篇文章之前其实我已经将此篇文章写过了两三次了.就是发表不成功.而且CSDN将我的文章草稿也一带>删除掉 ...

最新文章

  1. jq 浏览器窗口大小发生变化时
  2. Spring:SpringMVC一例
  3. 极光推送maven与代码,无需修改,粘贴即用
  4. linux查看文件位置命令bwd,linux 操作系统中find文件搜索命令的使用
  5. 查看ie保存的表单_解决浏览器保存密码自动填充问题
  6. 联想童夫尧:细分市场将是PC未来新增长点
  7. html网站 放新闻 文件夹名字 是什么,服务器上传网页文件时应注意哪几点?
  8. MyBatis源码本地编译
  9. eureka服务下架、服务续期及eureka源码分析
  10. 各种软件系统架构图解析
  11. 一文说明白ECDSA spec256k1 spec256r1 EdDSA ed25519千丝万缕的关系
  12. ArcGIS图层标注显示(将图层属性名字显示出来)
  13. http 代理服务器搭建 tinyProxy
  14. MarkDown添加图片的三种方式
  15. 一个ios工程师必须具备的八大知识技能点
  16. maven 修改maven本地仓库的位置
  17. 中兴通讯联合SWAN Mobile打通斯洛伐克首个5G视频电话
  18. 替换Android手机的开机动画,安卓技术宅系列之修改手机开机动画
  19. SimpleITK读取医学影像文件
  20. 怎样锁定计算机的技巧,小白实用电脑技巧22——电脑如何设置密码并锁定

热门文章

  1. jsp中taglib属性
  2. python if中的false(哪些视为False)
  3. 快速搞定前端技术一面 匹配大厂面试要求学习笔记
  4. 【LiteOS】LiteOS移植常见问题分析
  5. OpenHarmony——LiteOS小故事(进程篇)
  6. Python3.X下安装Scrapy (转自鱼c论坛作者lumber2388779)
  7. 博途(TIA)软件安装教程;博途软件安装常见问题解决办法
  8. ORA-01591错误的原因和处理方法
  9. 游戏数值策划属性篇(一):关于属性设计的几点思考
  10. ppsspp 手柄按键映射 北通 BTP