开发者社区> 问答> 正文

如何配置jvm最大堆内存

如何配置jvm最大堆内存

展开
收起
李博 bluemind 2019-02-01 16:26:30 4015 0
2 条回答
写回答
取消 提交回答
  • 启动参数使用 -Xmx1G 则限制堆最大内存为1G

    2019-07-17 23:27:31
    赞同 展开评论 打赏
  • 需要根据你到需要进行设置,所以需要理解JVM的内存有什么:
    JVM堆内存分为2块:Permanent Space 和 Heap Space。
    Permanent 即 持久代(Permanent Generation),主要存放的是Java类定义信息,与垃圾收集器要收集的Java对象关系不大。(java8 开始,此部分放在元空间中)
    Heap = { Old + NEW = {Eden, from, to} },Old 即 年老代(Old Generation),New 即 年轻代(Young Generation)。年老代和年轻代的划分对垃圾收集影响比较大。


    年轻代:
    所有新生成的对象首先都是放在年轻代。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。年轻代一般分3个区,1个Eden区,2个Survivor区(from 和 to)。

    大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当一个Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当另一个Survivor区也满了的时候,从前一个Survivor区复制过来的并且此时还存活的对象,将可能被复制到年老代。

    2个Survivor区是对称的,没有先后关系,所以同一个Survivor区中可能同时存在从Eden区复制过来对象,和从另一个Survivor区复制过来的对象;而复制到年老区的只有从另一个Survivor区过来的对象。而且,因为需要交换的原因,Survivor区至少有一个是空的。特殊的情况下,根据程序需要,Survivor区是可以配置为多个的(多于2个),这样可以增加对象在年轻代中的存在时间,减少被放到年老代的可能。

    针对年轻代的垃圾回收即 Young GC。

    年老代:
    在年轻代中经历了N次(可配置)垃圾回收后仍然存活的对象,就会被复制到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象。

    针对年老代的垃圾回收即 Full GC。


    需要根据不用的应用场景设置不同区域的大小:例如如果请求都是短频快,需要扩大吞吐量时,可以适当增加年轻代

    2019-07-17 23:27:31
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云服务器ECS内存增强型实例re6全新发布 立即下载
JVM的GC 立即下载
基于JVM的脚本语言开发、运用实践 立即下载