zoukankan      html  css  js  c++  java
  • 在线生成JVM参数配置

    在线生成JVM参数配置

    网址:http://jvmmemory.com

    堆参数设置

    -XX:+PrintGC

    使用这个参数,虚拟机启动后,只要遇到GC就会打印日志。

    -XX:+PrintGCDetails

    可以查看详细信息,包括各个区的情况

    -XX:+PrintHeapAtGC 

    打印 GC 前后的详细堆栈信息

    -Xms

    设置Java程序启动时初始化JVM堆内存大小。

    -Xmx

    设置Java程序能获得最大JVM堆内存大小。

    在实际工作中,我们可以直接将初始的堆大小与最大堆大小设置相等,这样的好处是可以减少程序运行时的垃圾回收次数,从而提高性能。

    -XX:+PrintFlagsInitial

    打印JVM初始化参数。

     -XX:+PrintFlagsFinal 

    标记人为修改过的参数。

    -XX:+PrintCommandLineFlags

    查看默认垃圾回收器。
    新生代参数设置

    -XX:NewSize=5m

    设置新生代最小空间大小

    -XX:MaxNewSize=10m

    设置新生代最大空间大小

    -Xmn2g

    可以设置新生代的大小,设置一个比较大的新生代会减少老年代的大小,这个参数对系统性能以及GC行为有很大的影响,新生代大小一般会设置整个堆空间的1/3。

    -XX:SurvivorRatio=8(默认) 

    用来设置新生代中eden空间和from/to空间的比例。含义:-XX:SurvivorRatio=eden/from=eden/to。基本策略:尽可能将对象预留在新生代,减少老年代的GC次数。

    -XX:NewRatio=2(默认) 

    设置新生代和老年代的比例:-XX:NewRatio=老年代/新生代。

    对象进入老年代参数设置

     -XX:MaxTenuringThreshold=15 

    新生代每次GC之后如果对象没有被回收,则年龄加1,默认情况下为15

    堆溢出参数配置

    -XX:+HeapDumpOnOutOfMemoryError

    使用该参数可以在内存溢出时导出整个堆信息

    -XX:HeapDumpPath=D:/OOM.dump

    可以设置导出堆的存放路径。

    堆栈相关参数配置

     -Xss1m(默认)

    来指定线程的最大栈空间

    方法区相关参数配置

    JDK1.2 ~ JDK6,使用永久代来实现方法区

    -XX:PermSize=64M

    设置永久代最小空间大小。

    -XX:MaxPermSize=64M(默认) 

    如果系统运行时生产大量的类,就需要设置一个相对合适的方法区,以免出现永久区内存溢出的问题。

    Java8,元空间取代永久代,存储位置不同,永久代物理是堆的一部分,和新生代,老年代地址是连续的

    而元数据放到本地化的堆内存(native heap)中,这一块区域就叫Metaspace,中文名叫元空间。

    存储内容不同,元空间存储类的元信息
    静态变量和常量池等并入堆中。
    相当于永久代的数据被分到了堆和元空间中。

    -XX:MetaspaceSize=128m(默认)

    初始化大小。

     -XX:MaxMetaspaceSize=128m 

    JVM默认在运行时根据需要动态地设置MaxMetaspaceSize的大小。

    直接内存(堆外内存)参数配置

    -XX:MaxDirectMemorySize=64m

    该值是有上限的,默认是64M,最大为sun.misc.VM.maxDirectMemory()。 直接内存使用达到上限时,就会触发垃圾回收(Full GC),如果不能有效的释放空间,就会引起系统的OOM。

    注:heap ByteBuffer,该类对象分配在JVM的堆内存里面,直接由Java虚拟机负责垃圾回收。
    direct ByteBuffer是通过jni在虚拟机外内存中分配的。

    生命周期中等或较长的对象,适合堆外内存。
    直接的文件拷贝操作,或者I/O操作,适合堆外内存:
    直接使用堆外内存就能少去资源从用户内存拷贝到系统内存的操作。

    DirectByteBuffer是通过虚引用(Phantom Reference)来实现堆外内存的释放的:
    虚引用主要被用来跟踪对象被垃圾回收的状态,
    通过查看引用队列(ReferenceQueue)中是否包含对象所对应的虚引用来判断它是否即将被垃圾回收,从而采取行动。
    它并不被期待用来取得目标对象的引用。

    初始化DirectByteBuffer对象时,如果当前堆外内存的条件很苛刻时,会主动调用System.gc()强制执行Full GC。

    TLAB参数配置

    Thread Local Allocation Buffer即线程本地分配缓存:
    一个线程专用的内存分配区域,是为了加速对象分配对象而生的。
    每一个线程都会产生一个TLAB,该线程独享的工作区域,Java虚拟机使用这种TLAB区来避免多线程冲突问题,提高了对象分配的效率。

    -XX:+UseTLAB(默认开启) 

    使用TLAB

    -XX:TLABSize=64k(默认) 

    设置TLAB初始化大小

    -XX:TLABRefillWasteFraction=64

    设置维护进入TLAB空间的单个对象大小,它是一个比例值,默认为64,即如果对象大于整个空间的1/64,则在堆创建对象。

     -XX:+ResizeTLAB 

    自调整TLABRefillWasteFraction阈值。

    -XX:+PrintTLAB 

    查看TLAB信息

    from https://mp.weixin.qq.com/s/_n8l5VNKnUYCACbDsmKk8w

  • 相关阅读:
    Freezing Your Tuples Off 之 vacuum_freeze_min_age
    Understanding virtualxid && transactionid
    PostgreSQL and bloat
    FSM, VISIBILITY MAP AND VACUUM
    Heap Only Tuples (HOT)
    Measuring PostgreSQL Checkpoint Statistics
    PgSQL · 特性分析 · 谈谈checkpoint的调度
    TypeError: Unexpected keyword argument passed to optimizer: amsgrad原因及解决办法
    kitti 数据集解析
    ubuntu16.04 跑Apollo Demo
  • 原文地址:https://www.cnblogs.com/fb010001/p/12467980.html
Copyright © 2011-2022 走看看