堆空间是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. 用iostat对linux硬盘IO性能进行检测

    近期公司安装了几台DELL PE2650和2850的服务器,统一安装的是RHLE5.132位系统,而服务器的SCSI硬盘都统一做了raid1.公司老总要求对硬盘IO作统一检测报告,在Linux下找了许 ...

  2. VSCode------.net core2.0发布后配置到Window Service 2008R2报500错误

    如图: 解决方法: 出现这个错误是因为 IIS 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改. 要取消锁定可以运行命令行 %windir%\system32\ine ...

  3. Java实现循环体的过滤器

    编写程序,利用continue语句实现循环体过滤器,过滤“老鹰”字符串,并做相应的处理,但是放弃continue语句之后的所有代码.即若遇到“老鹰”字符串则进行特定处理,然后使用continue语句跳 ...

  4. VB2008新特性

    1.扩展方法 (Extension Methods) 给Person类扩展Print方法 Public Module PersonExtension <System.Runtime.Compil ...

  5. nvm-windows的安装配置

    首先建议把你之前安装的node.js的msi版本给卸载掉. 然后下载nvm-windows并按照默认配置一步步安装 由于国外的镜像源下载慢,所以打开C:\Users\dell\AppData\Roam ...

  6. NuGet的几个小技巧(转)

    NuGet的几个小技巧   因为可视化库程序包管理器的局限性,有很多需要的功能在界面中无法完成. 以下技巧均需要在“程序包管理器控制台”中使用命令来完成. 一.改变项目目标框架后,更新程序包 当改变项 ...

  7. Python 爬虫系列:糗事百科最热段子

    1.获取糗事百科url http://www.qiushibaike.com/hot/page/2/    末尾2指第2页 2.分析页面,找到段子部分的位置, 需要一点CSS和HTML的知识 3.编写 ...

  8. C语言的声明的优先级规则

    C语言的声明的优先级规则如下: A 声明从它的名字开始读取,然后按照优先级顺序依次读取 B 优先级从高到低依次是:   B.1 声明中被括号括起来的那一部分   B.2 后缀操作符[圆括号 ()表示这 ...

  9. Mock

    转移到  这里 像测试对象提供一套和测试资源完全相同 的接口和方法,不关心过程,只关心结果(比如模拟拿到服务器的code)

  10. React Native(十)——TextInput一点小结

    11.24(后续的道路会更加漫长,一点一点总结上去吧~): 从昨天开始接触Mac,实在让自己有点“奔溃”的赶脚……老大说,“不要紧,多接触接触就好了.” 于是,我就开始了跟Mac死磕到底的准备……就先 ...