初识jvm堆,栈参数
堆的分配参数:
-Xmx //设立最大堆
-Xms //最小堆,初始化堆大小
-Xmn //设置新生代(eden+2*surviivor+old)大小 官方推荐:3/8Xmx------》感觉就是-XX:NewRatio 2到3之间
-XX:NewRatio //新生代(eden+2*s)和老年代(不包含永久区,永久区是非堆)的比值 2表示 新生代:老年代=1:2,即年轻代占堆的1/3,一般来说,老年代占比较多
-XX:SurvivorRatio //8 表示 (两个)Survivor :eden=2:8,即一个Survivor占年轻代的1/10(官方推荐比例),当eden区满了,就回触发垃圾回收
示例:新生代(def new generation)与老年代(tenured)的比例1:1,各占10M左右
通过调节eden区(SurvivorRatio)的大小,减少gc次数 ,会影响新生代晋升老年代 。 这里老年代的话,一种是分配担保,一种是GC次数多了,可能会回收新生代的大年龄引用
在OOM时,记得Dump出堆,确保可以排查现场问题,不然难以复现
-XX:+HeapDumpOnOutOfMemoryError OOM时导出堆到文件
-XX:OnOutOfMemoryError 在OOM时,执行一个脚本,可以报警,发送邮件
-XX:+HeapDumpPath 导出OOM的路径
-Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump
Vector v=new Vector();
for(int i=0;i<25;i++)
v.add(new byte[1*1024*1024]);
//总共18.8M,每一个节点占据1.048M
栈大小分配
-Xss 通常只有几百K(1M已经很够了) 决定了函数调用的深度 每个线程都有独立的栈空间 局部变量、参数 分配在栈上
一般来说,方法的递归调用,会出现函数调用的深度过深,导致java.lang.StackOverflowError
最新文章
- java第三周学习
- 20145205《Java程序设计》课程总结
- php 常见问题
- 转:linux下jar命令与jar包
- 第三个Sprint冲刺事后诸葛亮报告
- [转]新型智慧城市总体架构 华为 新ICT 一云二网三平台
- Java基础-String、StringBuffer、StringBuilder
- mysql查找字符串出现位置
- Handler sendMessage 与 obtainMessage (sendToTarget)
- 【java提高】---HashMap解析(一)
- 重构:以Java POI 导出EXCEL为例
- Linux下的tar压缩解压缩命令详解(转)
- 微软已发布 Windows 10 Timeline 功能的官方 Chrome 插件
- 百度地图JSSDK使用小实例
- 第六章 数据库设计之ER模型
- node 相关
- AsyncTask和AsyncQueryHandler之比较
- 告诉你html5比普通html多了哪些东西?
- windows server 2008 站点系列--AD的站点建立与子网的管理(zhuanzai)
- linux安装PHP-memcache-redis扩展