堆的分配参数

-Xmn

–设置新生代大小

注意:此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是不同的。
整个堆大小=年轻代大小 + 年老代大小 + 持久代大小.
增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8

-XX:NewRatio

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

–4 表示(表示老年代是新生代的4倍) 新生代:老年代=1:4,即年轻代占堆的1/5

-XX:SurvivorRatio

–设置两个Survivor区和eden的比

–8表示(eden的大小是一个Survivor的8倍) 两个Survivor :eden=2:8,即一个Survivor占年轻代的1/10

内存溢时导出到指定路径

-XX:+HeapDumpOnOutOfMemoryError

–OOM时导出堆到文件

-XX:+HeapDumpPath

–导出OOM的路径

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

-XX:OnOutOfMemoryError

–在OOM时,执行一个脚本

"-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p“

当程序OOM时,在D:/a.txt中将会生成线程的dump

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

总结:

根据实际事情调整新生代和幸存代的大小

官方推荐新生代占堆的3/8

幸存代占新生代的1/10

在OOM时,记得Dump出堆,确保可以排查现场问题

时间: 2024-11-08 16:29:38

堆的分配参数的相关文章

堆的分配和释放(malloc,free,calloc,realloc)

malloc void * malloc(size_t _Size); malloc函数在堆中分配参数_Size指定大小的内存,单位:字节,函数返回void *指针. free void free(void *p); free负责在堆中释放malloc分配的内存.参数p为malloc返回的堆中的内存地址 calloc: void * calloc(size_t _Count, size_t _Size); calloc与malloc类似,负责在堆中分配内存.Malloc只分配,但不负责清理内存,

JVM堆内存管理与自定义分配参数详解

堆内存模型: 在Java中,堆被划分成两个不同的区域:新生代(Young),老年代(Old).而Permanent属于永久代(方法区),不属于堆内存.新生代又被分为了三个区域:Eden,from  survivor,to survivor.这样划分的目的是为了使JVM能够更好的管理堆内存中的对象,包括内存分配以及回收. 从图中可以看出: 堆大小=新生代+老年代,默认的,新生代与老年代的比例为1:2(该值可以通过参数-XX:NewRatio指定),即:新生代=1/3堆空间大小,老年代=2/3堆空间

如何限制一个类只在堆上分配和栈上分配(StackOnly HeapOnly)

[本文链接] http://www.cnblogs.com/hellogiser/p/stackonly-heaponly.html [题目] 如何限制一个类只在堆上分配和栈上分配? [代码] C++ Code 1234567891011121314   class StackOnly { private:     void *operator new(size_t size) {}; }; class HeapOnly { public:     void destroy(); private

JVM之对分配参数详解

一.堆参数设置 -XX:+PrintGC 使用这个参数,虚拟机启动后,只要遇到GC就会打印日志-XX:+UseSerialGC 配置串行回收器-XX:+PrintGCDetails 可以查看详细信息,包括各个区的情况-Xms:设置Java程序启动时初始化堆大小-Xmx:设置Java程序能获得最大的堆大小-Xmx20m -Xms5m -XX:+PrintCommandLineFlags:可以将隐式或者显示传给虚拟机的参数输出在实际工作中,我们可以直接将初始的堆大小与最大堆大小设置相等,这样的好处是

Spark1.5堆内存分配

这是spark1.5及以前堆内存分配图 下边对上图进行更近一步的标注,红线开始到结尾就是这部分的开始到结尾 spark 默认分配512MB JVM堆内存.出于安全考虑和避免内存溢出,Spark只允许我们使用堆内存的90%,这在spark的spark.storage.safetyFraction 参数中配置着.也许你听说的spark是一个内存工具,Spark允许你存储数据在内存.其实,Spark不是真正的内存工具,它只是允许你使用内存的LRU(最近最少使用)缓存 .所以,一部分内存要被用来缓存你要

jvm内存模型及分配参数

jvm内存模型 程序计数器:是一块很小的内存空间.当线程数量超过cpu数量时,线程之间根据时间片轮询抢夺cpu资源.每一个线程都必须用一个独立的程序计数器,用于记录下一条要运行的指令. java虚拟机栈(线程栈 ):也是线程私有内存空间,他和java线程在同一时间创建,他保存方法的局部变量.部分结果,并参与方法的调用和返回.如果线程在计算过程中,请求的栈深度大于最大可用的栈深度,则抛出StackOverflowError:如果java栈可以动态扩展,而在扩展的过程中,操作系统没有足够的内存空间来

【转】数据结构中栈和堆---内存分配中栈和堆

一.数据结构的栈和堆 首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈.堆和栈都是一种数据项按序排列的数据结构. 1)栈就像装数据的桶或箱子  我们先从大家比较熟悉的栈说起吧,它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取.这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体). 2)堆像一棵倒过来的树 而堆就不同了,堆是一种经过排序的树形数据结构,每个结点都有一个值.通常我们

托管堆内存分配优化

内存问题概述 和CPU一样,内存也是一个直接影响服务端性能的重要的硬件资源. 一般来说,如果服务端内存不足,从导致以下两个问题产生: 1. 导致服务端把一些原本要写到内存中的数据,写到硬盘上面.这样不仅仅加大了CPU和磁盘的I/O操作,同时也延长了读取这些数据的时间. 2. 阻止了一些缓存策略的使用. 对于内存不足,一直最快最直接的方式就是去买内存条加在服务器上面.但是这样存在一个隐患的问题就是:如果加了新的内存之后,服务端又面临内存不足的问题,我们不可能无止境的加内存条,那么我们就必须从站点本

JVM 堆内存,参数优化

Java堆内存 http://www.importnew.com/19593.html JVM诊断之查看运行参数 JVM 垃圾回收器工作原理及使用实例介绍 https://www.ibm.com/developerworks/cn/java/j-lo-JVMGarbageCollection/ Java 理论与实践: 垃圾收集简史 https://www.ibm.com/developerworks/cn/java/j-jtp10283/index.html