zoukankan      html  css  js  c++  java
  • JVM手动分配内存(转载)

    原文内容很详细,不利于快速浏览,所以只保留了重点

    原文地址 http://blog.csdn.net/mr__fang/article/details/47723767

    内存检测工具jvisualVM参考

    https://www.ibm.com/developerworks/cn/java/j-lo-visualvm/

    下面这篇更详细些

    http://www.cnblogs.com/feng-gamer/p/6039380.html

    内存设置的主要参数:

    Trace跟踪参数(打印日志):

    1、打印GC的简要信息

    -verbose:gc
    -XX:+printGC

    2、打印GC的详细信息:

    -XX:+PrintGCDetails

    3打印CG发生的时间戳

    -XX:+PrintGCTimeStamps

    4指定GC log的位置:

    -Xloggc:log/gc.log

    5每一次GC前和GC后,都打印堆信息。

    -XX:+PrintHeapAtGC

    6监控类的加载。

    -XX:+TraceClassLoading

    7按下Ctrl+Break后,打印类的信息(mac上没法用)

    -XX:+PrintClassHistogram

    二、堆的分配参数:

    1.-Xmx –Xms:指定最大堆和最小堆

    2.

    • -Xmn

        设置新生代大小

    • -XX:NewRatio

        新生代(eden+2*s)和老年代(不包含永久区)的比值

            例如:4,表示新生代:老年代=1:4,即新生代占整个堆的1/5

    • -XX:SurvivorRatio(幸存代)
      -XX:SurvivorRatio=8

        设置两个Survivor区和eden的比值

            例如:8,表示两个Survivor:eden=2:8,即一个Survivor占年轻代的1/10

    3、-XX:+HeapDumpOnOutOfMemoryError、-XX:+HeapDumpPath

    • -XX:+HeapDumpOnOutOfMemoryError

        OOM时导出堆到文件

          根据这个文件,我们可以看到系统dump时发生了什么。

    • -XX:+HeapDumpPath(这个可以不设置,默认到处到当前项目根目录下,设置后会因为文件名相同无法导出第二次)

        导出OOM的路径

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump

    4、-XX:OnOutOfMemoryError:

    • -XX:OnOutOfMemoryError

        在OOM时,执行一个脚本。

          可以在OOM时,发送邮件,甚至是重启程序。

    -XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p //p代表的是当前进程的pid 

    5.

    堆的分配参数总结:

    • 根据实际事情调整新生代和幸存代的大小
    • 官方推荐新生代占堆的3/8
    • 幸存代占新生代的1/10
    • 在OOM时,记得Dump出堆,确保可以排查现场问题

    6、永久区(也就是常说的methodSpace)分配参数:

    • -XX:PermSize  -XX:MaxPermSize
    • 类多了就炸了

        设置永久区的初始空间和最大空间。也就是说,jvm启动时,永久区一开始就占用了PermSize大小的空间,如果空间还不够,可以继续扩展,但是不能超过MaxPermSize,否则会OOM。

        他们表示,一个系统可以容纳多少个类型

    三、栈的分配参数:

    1、Xss:

    -Xss256K 

    设置栈空间的大小。通常只有几百K

      决定了函数调用的深度

      每个线程都有独立的栈空间

      局部变量、参数 分配在栈上

    注:栈空间是每个线程私有的区域。栈里面的主要内容是栈帧,而栈帧存放的是局部变量表,局部变量表的内容是:局部变量、参数。

    用没有出口的递归调用可导致栈溢出

  • 相关阅读:
    BigInteger与BigDecimal
    Java常用类之时间类
    Java常用类之字符串类
    单例对象 (Singleton)设计模式
    包装类的使用
    Object 类中的主要结构
    PostgreSQL执行计划的解析
    Redis5.0 配置文件中文参考
    jvm系列(六):jvm调优-工具篇
    5,Spark中文件格式、压缩和序列化
  • 原文地址:https://www.cnblogs.com/lakeslove/p/7273145.html
Copyright © 2011-2022 走看看