堆空间是Java进程的重要组成部分,几乎所有的应用相关的内存空间都和堆有关。

1.最大堆和初始堆的设置

当Java程序启动时,虚拟机就会分配一块初始堆空间,使用参数 -Xms 指定这块空间的大小。一般来说,虚拟机尽可能维持初始堆空间的范围内运行。如果初始堆空间耗尽会进行扩展。最大堆空间使用参数 -Xmx指定。

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

新生代的配置

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

   参数 -XX:SurvivorRatio 用来设置新生代中 eden空间和from/to空间的比例关系,含义如下:

   --X:SurvivorRatio=eden/from=eden/to

   这段代码连续向系统请求10MB空间,每次申请1MB

[GC (Allocation Failure) [PSYoungGen: 512K->488K(1024K)] 512K->512K(19968K), 0.0008869 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
Heap
PSYoungGen total 1024K, used 860K [0x00000000ffe80000, 0x0000000100000000, 0x0000000100000000)
eden space 512K, % used [0x00000000ffe80000,0x00000000ffedd2f8,0x00000000fff00000)
from space 512K, % used [0x00000000fff00000,0x00000000fff7a020,0x00000000fff80000)
to space 512K, % used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000)
ParOldGen total 18944K, used 10264K [0x00000000fec00000, 0x00000000ffe80000, 0x00000000ffe80000)
object space 18944K, % used [0x00000000fec00000,0x00000000ff6060a0,0x00000000ffe80000)
Metaspace used 2666K, capacity 4486K, committed 4864K, reserved 1056768K
class space used 286K, capacity 386K, committed 512K, reserved 1048576K
Java HotSpot(TM) 64-Bit Server VM warning: NewSize (1536k) is greater than the MaxNewSize (1024k). A new max generation size of 1536k will be used.

这里eden与from的比值为2比1,故eden区为512kb。这里使用的jdk1.8最后提示:NewSize (1536k) is greater than the MaxNewSize (1024k). A new max generation size of 1536k will be used.

超过了设定的1M

由于eden区无法容纳任何一个程序分配的1MB数组,故触发了一次新生代GC,对eden区进行了部分回收,同时,这个偏小的新生代无法为1MB数组预留空间,所以所有的都分配在老年代,老年代最终占用10264KB空间。

在实际工作中,应该根据系统的特点做合理的设置,基本策略是:尽可能将对象预留在新生代,减少老年代GC的次数。

除了可以使用-Xmn指定新生代的绝对大小外,还可以使用 -XX:NewRatio 来设置新生代和老年代的比例。  -XX:NewRatio=老年代 / 新生代

Java虚拟机五 堆的参数配置的更多相关文章

  1. 了解java虚拟机—非堆相关参数设置(4)

    非堆内存相关配置 -XX:PermSize 永久区初始大小 -XX:MaxPermSize 永久区最大大小 在JDK1.8中使用-XX:MxMetaspaceSize配置永久区最大大小 -Xss 线程 ...

  2. 实战Java虚拟机之一“堆溢出处理”

    从今天开始,我会发5个关于java虚拟机的小系列: 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实战Java虚拟机之四 ...

  3. 如何设置Java虚拟机JVM启动内存参数

    Tomcat默认的Java虚拟机JVM启动内存参数大约只有64MB或者128MB,非常小,远远没有利用现在服务器的强大内存,所以要设置Java虚拟机JVM启动内存参数.具体设置方法为: Tomcat修 ...

  4. Java虚拟机详解----常用JVM配置参数

    本文主要内容: Trace跟踪参数 堆的分配参数 栈的分配参数 零.在IDE的后台打印GC日志: 既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技能,它只是一些人为确定的规则,没有太多 ...

  5. 【转】Java虚拟机详解----常用JVM配置参数

    原文地址:http://www.cnblogs.com/smyhvae/p/4736162.html 本文主要内容: Trace跟踪参数 堆的分配参数 栈的分配参数 零.在IDE的后台打印GC日志: ...

  6. 【java虚拟机】常用的jvm配置参数

    转自:https://www.cnblogs.com/pony1223/p/8661219.html 零.在IDE的后台打印GC日志: 既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技 ...

  7. Java虚拟机六 堆溢出的处理

    在Java程序中,如果堆空间不足,有可能抛出内存溢出错误:Out Of Memory,简称OOM. Exception in thread "main" java.lang.Out ...

  8. 2019/05/11 JAVA虚拟机原理堆、栈、方法区概念区别

    Java堆 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对 ...

  9. java虚拟机的堆内存配置

    官网文档地址:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html 接录如下: -XX:MaxHeapSize=si ...

随机推荐

  1. Winform窗体控件自适应大小

    自己写的winform窗体自适应大小代码,代码比较独立,很适合贴来贴去不会对原有程序造成影响,可以直接继承此类或者把代码复制到自己的代码里面直接使用 借鉴了网上的一些资料,最后采用重写WndProc方 ...

  2. JIRA 初体验

    JIRA 使用神奇的JQL查询数据,很nice啊 ! 官网API:   https://docs.atlassian.com/jira/REST/latest/#d2e2344 测试一下search: ...

  3. php5.4安装fileinfo扩展

    Fileinfo 扩展是libmagic库的一个封装,可以用来获得文件的一些信息,如MIME类型 安装php_fileinfo扩展 1.windows 用phpinfo()查看php版本 下载 选择合 ...

  4. nginx: [emerg] getpwnam(“www”) failed错误

    linux 64系统中安装nginx时如果出现错误:nginx: [emerg] getpwnam(“www”) failed in ........解决方法1:      在nginx.conf中 ...

  5. python中如何将字符串连接在一起,多倍的字符串如何输出

    说明: 在python中,如果有多个字符串,想要连接在一起,或者说想要拼接在一起该如何操作,在此记录下. 操作过程: 1.通过 + 这个加号操作符,将字符串拼接在一起 >>> &qu ...

  6. Linq To EF (添加记录后获取添加的自增ID和叫“ID”的列不是自增列不让插入的问题)

    1:添加记录后,如何获取新添加的ID的值 比如,一个实体 TestEntity   对应一个表TestEntity(ID主键自增,Name,age),使用linq to ef   添加一条记录后,如何 ...

  7. 禁用滚动视图ListView、ViewPager、ScrollView、HorizontalScrollView、WebView边界颜色渐变

    禁用滚动视图ListView.ViewPager.ScrollView.HorizontalScrollView.WebView边界颜色渐变 ListView.ViewPager.ScrollView ...

  8. js循环异常

    1.当在循环数组时,数组发生变化,循环item 为定义undifined $.each(blogMng.commonKit.upLoadMng.medias, function (index, ite ...

  9. Java Comparable和Comparator

    Java中在进行数据排序时,Comparable和Comparator不可缺少会遇得到.普通的String.Integer等类型,已经实现了Comparable接口,而有些时候,我们须要对一些其它不存 ...

  10. switch和continue的关系

    突然想到 我们用 switch都是用 break return等关键字来配合,有没有一种情况下是用continue呢?而且如果真的出现了continue,结果是什么样的呢?