堆的分配参数:

-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

初识jvm堆,栈参数的更多相关文章

  1. Java 底层机制(JVM/堆/栈/方法区/GC/类加载)

    转载:https://www.jianshu.com/p/ae97b692614e?from=timeline JVM体系结构 JVM是一种解释执行class文件的规范技术.   JVM体系结构 我翻 ...

  2. JVM堆 栈 方法区详解

    一.栈 每当启用一个线程时,JVM就为他分配一个JAVA栈,栈是以帧为单位保存当前线程的运行状态 栈是由栈帧组成,每当线程调用一个java方法时,JVM就会在该线程对应的栈中压入一个帧 只有在调用一个 ...

  3. jvm堆配置参数

    1.-Xms初始堆大小默认物理内存的1/64(<1GB)(官方建议)2.-Xmx最大堆大小默认物理内存的1/4(<1GB)(官方建议),实际中建议不大于4GB3.一般建议设置 -Xms=- ...

  4. JVM堆内存参数优化,让性能飞起来

    堆内存是Java进程的重要组成部分,几乎所有与应用相关的内存空间都和堆有关.现在主要介绍与堆内存相关的参数设置,这些参数对Java虚拟机中非常重要的,也是对程序性能有着重要的影响.让你彻底脱离OOM内 ...

  5. Java基础-JVM堆与栈

    首先看一个解析列子 JVM的内存空间: (1). Heap 堆空间:分配对象 new Student() (2). Stack 栈空间:临时变量 Student stu (3).Code 代码区 :类 ...

  6. JVM基础:深入学习JVM堆与JVM栈

    转自:http://developer.51cto.com/art/201009/227812.htm JVM栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;JVM堆解决的是数据存储的问题, ...

  7. 7.JVM调优-方法区,堆,栈调优详解

    通常我们都知道在堆空间新生代Eden区满了,会触发minor GC, 在老年代满了会触发full GC, 触发full GC会导致Stop The World, 那你们知道还有一个区域满了一会触发Fu ...

  8. JVM堆内存相关的启动参数:年轻代、老年代和永久代的内存分配

    如果想观察JVM进程占用的堆内存,可以通过命令工具jmap或者可视化工具jvisualvm.exe.JVM这些启动参数都拥有默认值,如果想了解JVM的内存分配策略,最好手动设置这些启动参数.再通过JD ...

  9. 【转】jvm 堆内存 栈内存 大小设置

    原文地址:http://blog.csdn.net/qh_java/article/details/46608395 4种方式配置不同作用域的jvm的堆栈内存! 1.Eclise 中设置jvm内存: ...

随机推荐

  1. jquery不能实时获取CKEDITOR值的解决方法

    不用传统的获取值的方法: var ckeditor = document.getElementById("ckeditor").value; 换成: var ckeditor =  ...

  2. Jmeter 录制脚本(一)

    第一种方法:使用Badboy来录制脚本 1. 启动Badboy, 工具栏上的红色圆形按钮是默认启动的,在地址栏直接输入被测试WEB项目的地址,然后点击右边的箭头. 2.录制完成后,点击工具栏上的黑色按 ...

  3. 微信小程序开发——setData的使用技巧

    前言: 之前使用 setData,一直都是作为给变量赋值,感觉比起vue给data中的变量的赋值还是有点麻烦的. 最近项目不太紧张,为了提高小程序的开发效率及提升小程序开发的能力,又重新的通读了下小程 ...

  4. Could not get lock /var/lib/dpkg/lock更新问题

    发生于apt-get update或apt update时. 常见手段,先试试: sudo rm /var/lib/dpkg/lock sudo rm /var/lib/apt/lists/lock ...

  5. 【zookeeper】使用场景

    以下场景是我认为的zookeeper可能会大显身手的场景. 场景1:配置新增和更新 我们可以将zookeeper部署成一个配置服务,实现配置的存储和发布等功能. 具体的原理是:zookeeper可以按 ...

  6. TZOJ 5291 游戏之合成(快速幂快速乘)

    描述 zzx和city在玩一款小游戏的时候,游戏中有一个宝石合成的功能,需要m个宝石才可以合成下一级的宝石(例如需要m个1级宝石才能合成2级宝石). 这时候zzx问city说“我要合成A级宝石需要多少 ...

  7. java链接JDBC中的?问题

    String sql = "select * from student where name= ?"; PreparedStatement pst = conn.prepareSt ...

  8. 在别家网站上执行自己的js代码(谷歌浏览器)(谷歌扩展程序)

    @参考文章1  @参考文章2 日前针对一家投标网站进行了程序干预,且一定程度的干预成功,把方法给大家提取分享出来,感谢上述两篇博文 测试网站:百度https://www.baidu.com/ 测试步骤 ...

  9. visual studio build and rebuild 的区别

    build 只编译发生改变的dll, (如下, 我只修改了web API,build的时候, 只有webAPI.dll发生更新) rebuild = clean + build (如下, 本项目中dl ...

  10. stark组件开发之URL分发和默认Handler

    为register 函数添加一个,prev参数,默认None ,用于可以让用户自己指定前缀. def register(self, model_class, handler_class=None, p ...