在做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. 第二次scrum冲刺
  2. 珠海网络推广浅析网站优化面对搜索引擎算法更新怎样才能应对自如?
  3. Android 4.1.2系统添加重启功能
  4. 力扣(leetcode)-1. 两数之和
  5. #define宏定义中的#,##,@#,\
  6. C# 多线程及同步简介示例
  7. CentOS6.5安装Tab增强版:bash-completion
  8. 计算机二级考试答题无法启动ppt,计算机二级考试中操作题常见问题之[演示文稿]...
  9. [HDU] 3491 Thieves
  10. Sharepoint学习笔记—Delegate Control--在Sharepoint页面添加jQuery
  11. 【OpenCV入门指南】第六篇 轮廓检测 下
  12. 三星app图标不见了怎么恢复_手机便签的内容不见了怎么恢复?试试这款便签软件的时间轴功能...
  13. hadoop配置文件还原_hadoop通过Configuration对象自定义配置文件
  14. python程序设计简明教程第二版答案_Python简明教程精编.pdf
  15. 利用支付宝和浙江图书馆网站免费获取知网文献(亲测可用)
  16. 成语秀才小程序部署问题总结
  17. Android中如何利用Minui显示PNG格式的图片
  18. jQuery便利多个相同的class,点击显示隐藏图标,显示及隐藏其下的内容
  19. 从FTP模块学习先进的诊断技术(Erlang Trace机制)
  20. ALPU-C防抄板加密芯片

热门文章

  1. 弘辽科技:淘宝开店会抽取多少利润?要多少费用?
  2. 工作记录:IIS 报 Bad Request(Invalid Hostname)
  3. Ubuntu互换ctrl和caps lock按键位置
  4. 使用python pillow 图片转字符串
  5. Android基于卷积神经网络的数字手势识别识别数字手势0-10 Android studio编译
  6. 二项逻辑回归模型(logistic regression model)
  7. 下载安装Hbuilder X
  8. 第一篇:移动APP开发-Hbuilder下载使用
  9. SQL语句中的SUBSTR()函数的使用
  10. vue兼容低版本chrome