• jvm堆配置参数


    1、-Xms初始堆大小
    默认物理内存的1/64(<1GB)(官方建议)
    2、-Xmx最大堆大小
    默认物理内存的1/4(<1GB)(官方建议),实际中建议不大于4GB
    3、一般建议设置 -Xms=-Xmx最大堆大小
    好处是避免每次在gc后,调整堆的大小,减少系统内存分配开销
    4、整个堆大小=年轻代大小+年老代大小+持久代大小

    jvm新生代(young generation)
    1、新生代=1个Eden区+2个Survivor区
    2、-Xmn 年轻代大小(1.4 or lator)
    -XX:NewSize, -XX:MaxNewSize(设置年轻代大小(for 1.3/1.4))
    默认值大小为这个堆的3/8
    3、-XX:NewRatio
    年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)
    Xms=Xmx并设置了Xmn的情况下,改参数不需要进行设置
    4、-XX:SurvivorRatio
    Eden区与Survivor区的大小比值,设置为8,则两个Survivor区与一个Eden区的比值为2:8,
    一个Survivor区占整个年轻代的1/10
    5、用来存放JVM刚分配的java对象

    java老年代(tenured generation)
    1、老年代=整个堆-年轻代大小-持久代大小;
    2、年轻代中经过垃圾回收没有回收掉的对象被复制到老年代;
    3、老年代存储对象比年轻代年龄大的多,而且不乏大对象;
    4、新建的对象也有可能直接进入老年代
    4.1大对象,可以通过启动参数设置-XX:PretenureSize Threshold=1024(单位为字节,默认为0)
    来代表超过多大时就不在新生代分配,而是直接在老年代分配
    4.2大的数组对象,且数组中无引用外部对象
    5、老年代大小无配置参数

    java持久代(perm generation)
    1、持久代=整个堆-年轻代大小-老年代大小
    2、-XX:PermSize -XX:MaxPermSize
    设置持久代的大小,一般情况推荐把-XX:PermSize设置成-XX:MaxPermSize的值为相同的值,
    因为永久代大小的调整也会导致堆内存需要触发fullgc
    3、存放Class、Method元信息,其大小与项目的规模、类、方法的数量有关。一般设置为128M就足够,
    设置原则是预留30%的空间
    4、永久代的回收方式
    4.1、常量池中的常量,无用的类信息,常量的回收很简单,没有引用了就可以被回收
    4.2、对于无用的类进行回收,必须保证3点:
    类的所有实例都已经被回收
    加载类的ClassLoader已经被回收
    类对象的Class对象没有被引用(即没有通过反射引用该类的地方)

  • 相关阅读:
    sql server的for xml path与变通的行转列
    nginx产生【413 request entity too large】错误的原因与解决方法
    spring的15个经典面试题
    数据库死锁预防规范
    服务端高并发分布式架构的演进
    后端接口统一返回响应对象
    数据库的dml、ddl和dcl的概念
    [na]ip routing&no ip routing
    [na]一站式学习wireshark
    [na]tcpdump参数应用参考
  • 原文地址:https://www.cnblogs.com/fansik/p/8287720.html
Copyright © 2020-2023  润新知