• JVM之---Java内存分配参数(第四篇)


    1.内存分配参数---大纲

    1. Ø如何设置堆内存
    2. Ø如何设置栈内存
    3. Ø如何设置方法区
    4. Ø如何设置对的分配比率
    5. Ø设置参数打印堆栈;
    6. ØJava程序的两种模式:Server&Client

    2.设置堆内存

    Ø设置最大堆内存
    Ø参数:-Xmx10M,表示堆内存最大为10M,如果超过10M则会出现内存溢出的异常。
    Ø查看方法: maxMemory()
    Ø设置最小堆内存
    Ø参数:-Xms2M,系统初始化的时候就会分配2M内存给java程序。
    Ø设置新生代内存
    Ø参数1:-Xmn5M,表示堆内存中新生代内存大小为5M,如果超过则会向老年代申请空间。
    Ø参数2:-XX:NewSize(最小的新生代大小)-XX:MaxNewSize(最大的新生代大小)
    Ø-Xmn5M==-XX:NewSize5M –XX:MaxNewSize5M
    Ø参数2不建议使用,会引起内存震荡。

    3、方法区内存

    Ø之前说过,对于使用了CGLib,Javassist,ASM等动态生成大量class类的框架尤其需要注意该内存的设置。
    Ø最小设置
    Ø参数:-XX:PermSize=4M;
    Ø解释:表示方法区最小的内存为4M,JVM初始化的时候就会分配至少4M的方法区内存。
    Ø最大设置
    Ø参数:-XX:MaxPermSize=10M
    Ø解释:表示方法区最大的内存为10M,当动态扩展超过10M的时候就会出现内存溢出。

    4、栈内存

    Ø栈内存貌似没有设置最大最小的参数,根据我的理解配置的参数是最大的,也就是说最大不能超过,如果没有线程则不会分配,这样应该是合理的,他的生命周期和线程一样。
    Ø配置参数:-Xss10M
    Ø解释:表示为没一个线程分配10M的空间
    Ø注意事项:
    Ø如果一个线程的内存使用超过了-Xss的设置则会抛出异常
    Ø如果给栈内存设置较大,则同时开启的线程数必然减少。
    Ø栈内存的大小还会影响到堆内存的大小;

    5、分配比率

    Ø堆的分配比率:
    Ø新生代:占据整个堆的1/4~1/3为最佳
    Ø新生代和s区的分配:最好设置为8:1为最佳
    Ø配置参数:-XX:SurvivorRatio=8
    Ø新生代和老年代的分配:最好设置为2:1为最佳
    Ø配置参数:-XX:NewRatio=2

    6、参数总结

    配置

    说明

    -Xms

    设置堆内存的最小值

    -Xmx

    设置堆内存的最大值

    -Xss

    设置栈内存的大小

    -XX:MinHeapFreeRatio

    设置堆内存的最小空闲比例

    -XX:MaxHeapFreeRatio

    这是堆内存的最大空闲比例

    -XX:NewSize

    设置新生代的最小内存值

    -XX:NewMaxSize

    设置新生代的最大内存值

    -XX:SurviorRatio

    设置Eden区和Survior区的比例

    -XX:MaxPermSize

    设置持久代的最大值

    -XX:PermSize

    设置持久代的最小值

    -XX:TargetSurvivorRatio

    设置survivor区的可使用率


    7、打印GC信息

    Ø不论是在进行MinorGC还是FullGC,使用该参数都可以当前的内存使用情况;
    Ø参数如下:
    Ø-XX:+PrintGCDetails
    Ø-verbose:gc

    Ø上面两个都可以,第一个较为详细!

    8、Java运行模式

    ØJava不会显式的制定运行的模式,JVM会根据内存的大小自动进行判断,主要有Server和Client两种模式。
    ØServer模式
    Ø启动速度慢
    Ø运行速度快
    ØJVM在Server模式默认-Xms是128M,-Xmx是1024M
    ØClient模式
    Ø启动速度快
    Ø运行速度没有Server模式快
    ØJVM在client模式默认-Xms是1M,-Xmx是64M

  • 相关阅读:
    安卓的sqlite增删改
    C#访问MySQL数据库(winform+EF)
    Sqlite在.NET下的使用和Sqlite数据库清理
    WPF小笔记-Popup拖动
    WPF自定义窗口最大化显示任务栏
    什么是Hash?什么是Hash算法或哈希函数?什么是map?什么是HashMap?HashMap的实现原理或者工作原理?HashMap是线程安全的吗?为什么?如何解决?
    字符串转换整数
    系统顺序图与顺序图区别,以及根据顺序图写代码
    设计领域模型有哪些难点?有哪些指导原则?
    斐波那契数列java实现
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3266725.html
Copyright © 2020-2023  润新知