需要提前了解的知识点:
1. JVM内存模型
2. JVM垃圾回收算法

下图是JVM内存区域划分的逻辑图

从图中我们大概了解JVM相关的内存区域。

JVM内存包括区域

  1. Heap(堆区)

    • New Generation(新生代)

      • Eden
      • Survivor From
      • Survivor To
    • Old Generation(老年代)
  2. 方法区

    • Permanent Generation(持久代)
  3. Stack(栈区)
  4. Metaspace(元空间)
  5. Direct ByteBuffer(直接内存)

下面我们就通过一些JVM启动参数来配置以上内存空间

Heap(堆)内存大小设置

-Xms512m

设置JVM堆初始内存为512M

-Xmx1g

设置JVM堆最大可用内存为1G

New Generation(新生代)内存大小设置

-Xmn256m

设置JVM的新生代内存大小(-Xmn 是将NewSize与MaxNewSize设为一致。256m),同下面两个参数
-XX:NewSize=256m
-XX:MaxNewSize=256m

还可以通过新生代和老年代内存的比值来设置新生代大小
-XX:NewRatio=3

设置新生代(包括Eden和两个Survivor区)与老年代的比值(除去持久代)。设置为3,则新生代与老年代所占比值为1:3,新生代占整个堆栈的1/4

Survivor内存大小设置

-XX:SurvivorRatio=8

设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个新生代的1/10

Eden内存大小设置

新生代减去2*Survivor的内存大小就是Eden的大小。

Old Generation(老年的)的内存大小设置

堆内存减去新生代内存
如上面设置的参数举例如下:
老年代初始内存为:512M-256M=256M
老年代最大内存为:1G-256M=768M

Stack(栈)内存大小设置

-Xss1m
每个线程都会产生一个栈。在相同物理内存下,减小这个值能生成更多的线程。如果这个值太小会影响方法调用的深度。

Permanent Generation(持久代)内存大小设置

方法区内存分配(JDK8以前的版本使用,JDK8以后没有持久代了,使用的MetaSpace)
-XX: PermSize=128m 设置持久代初始内存大小128M
-XX:MaxPermSize=512m 设置持久代最大内存大小512M

Metaspace(元空间)内存大小设置

元空间(Metaspace)(JDK8)
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m(JDK8),JDK8的持久代几乎可用完机器的所有内存,同样设一个128M的初始值,512M的最大值保护一下。

  1. 默认情况下,类元数据分配受到可用的本机内存容量的限制(容量依然取决于你使用32位JVM还是64位操作系统的虚拟内存的可用性)。
  2. 一个新的参数 (MaxMetaspaceSize)可以使用。允许你来限制用于类元数据的本地内存。如果没有特别指定,元空间将会根据应用程序在运行时的需求动态设置大小。

Direct ByteBuffer(直接内存)内存大小设置

-XX:MaxDirectMemorySize

此参数的含义是当Direct ByteBuffer分配的堆外内存到达指定大小后,即触发Full GC。注意该值是有上限的,默认是64M,最大为sun.misc.VM.maxDirectMemory(),在程序中中可以获得-XX:MaxDirectMemorySize的设置的值。
使用NIO可以api可以使用直接内存。

设置新生代代对象进入老年代的年龄

-XX:MaxTenuringThreshold=15

设置垃圾最大年龄。如果设置为0的话,则新生代对象不经过Survivor区,直接进入老年代。对于老年代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则新生代对象会在Survivor区进行多次复制,这样可以增加对象再新生代的存活时间,增加在新生代即被回收的概论。

他最大值为15岁,因为对象头中用了4位进行存储垃圾年龄 【1111(二进制)=15(十进制)】。

不常用的参数:

-XX:MaxHeapFreeRatio=70

GC后java堆中空闲量占的最大比例,大于该值,则堆内存会减少

-XX:MinHeapFreeRatio=40

GC后java堆中空闲量占的最小比例,小于该值,则堆内存会增加

-XX:PretenureSizeThreshold=1024

(单位字节)对象大小大于1024字节的直接在老年代分配对象

-XX:TLABWasteTargetPercent =1

TLAB占eden区的百分比 默认1%

本人简书blog地址:http://www.jianshu.com/u/1f0067e24ff8    
点击这里快速进入简书

GIT地址:http://git.oschina.net/brucekankan/
点击这里快速进入GIT

JVM 内存区域大小参数设置相关推荐

  1. JVM之JVM内存区域与内存分配(转载)

    2019独角兽企业重金招聘Python工程师标准>>> 先来看看JVM运行时候的内存区域 大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区),He ...

  2. 73.JVM内存基础结构,参数分类,推荐的配置项,参数混用问题,常用工具,常用命令

    73.JVM内存基础结构,参数分类,推荐的配置项,参数混用问题,常用工具,常用命令 73.1.堆内存基本结构 73.2.参数分类 73.3.推荐的配置项 73.4.参数混用问题 73.5.常用命令 7 ...

  3. 深入理解JVM内存区域与内存分配

    前言:这是一篇关于JVM内存区域的文章,由网上一些有关这方面的文章和<深入理解Java虚拟机>整理而来,所以会有些类同的地方,也不能保证我自己写的比其他网上的和书本上的要好,也不可能会这样 ...

  4. 深入理解JVM之JVM内存区域与内存分配

    在学习jvm的内存分配的时候,看到的这篇博客,该博客对jvm的内存分配总结的很好,同时也利用jvm的内存模型解释了java程序中有关参数传递的问题. 博客出处: http://www.cnblogs. ...

  5. JVM内存区域(Java内存区域)、JVM垃圾回收机制(GC)初探

    一.JVM内存区域(Java内存区域) 首先区分一下JVM内存区域(Java内存区域)和Java内存模型(JMM)的概念.Java线程之间的通信采用的是共享内存模型,这里提到的共享内存模型指的就是Ja ...

  6. 《探索JVM内存区域》

    一.为什么要了解JVM内存区域 二.结识JVM中的"内存"成员 1. 程序计数器(PC=Program Counter Register) 2. JVM栈(Java Virtual ...

  7. 深入解剖JVM内存区域

    不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨-[https://blog.csdn.net/cjm2484836553/article/details/103528907] 深入解剖J ...

  8. 走进JVM【二】理解JVM内存区域

    引言 对于C++程序员,内存分配与回收的处理一直是令人头疼的问题.Java由于自身的自动内存管理机制,使得管理内存变得非常轻松,不容易出现内存泄漏,溢出的问题. 不容易不代表不会出现问题,一旦内存泄漏 ...

  9. Java虚拟机------JVM内存区域

    JVM内存区域运行时数据区域分为两种: JVM内存区域 运行时数据区域分为两种: 线程隔离的数据区: 程序计数器 Java虚拟机栈 本地方法栈 所有线程程共享的数据区: Java堆 方法区 JVM 内 ...

最新文章

  1. linux apt-get update 和 upgrade 的区别
  2. 【字符串处理算法】最长连续字符及其出现次数的算法设计及C代码实现
  3. QT的QBarCategoryAxis类的使用
  4. eslint检测node 内部模块报错解决方案
  5. IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
  6. python--从入门到实践--chapter 9 类
  7. 动态加载TreeView
  8. 我是如何查找RFC官方资料的
  9. 继承单例模式 php_解决 PhpStorm 对 用单例模式实例化PHP类时,代码自
  10. 软件系统安全测试和性能测试的区别,【安全测试】性能测试进阶——基本概念篇...
  11. Nginx学习总结(13)——Nginx 重要知识点回顾
  12. 苹果公司发布TestFlight Groups,放宽二进制版本提交限制
  13. Java 学习笔记(官方不推荐写法篇)
  14. 141.3. 单机安装 CentOS 5 + hadoop-0.20.0
  15. w.php k,W/ (K·m)应读作( )。
  16. 西门子S7系列PLC的主要种类及应用软件
  17. tf.contrib.layers.embed_sequence()函数
  18. 最全教程----window11下 远程控制 云服务器CentOS7 并搭建上灯塔(1)
  19. java销毁servlet_servlet一般什么时候销毁
  20. 光模块协议之8436

热门文章

  1. 曝鸿蒙os手表,华为Watch GT 2曝光:第一款使用鸿蒙OS的智能手表
  2. 直播 | 帝国理工王剑虹:配电网中用多智能体强化学习进行的主动电压控制
  3. CVPR 2019 | 无监督领域特定单图像去模糊
  4. Google论文解读:轻量化卷积神经网络MobileNetV2 | PaperDaily #38
  5. BZOJ2131免费的馅饼 DP+树状数组
  6. dataset_flickr8k.json与dataset_flickr30k.json的比较
  7. Linux c modbus 线程,Modbus读写模拟量寄存器详解
  8. Java 过滤器解决URLSQL注入漏洞、跨站漏洞、框架注入漏洞、链接注入漏洞
  9. TensorFlow——本地加载fashion-mnist数据集
  10. Postman——导出测试接口集合的Collection文件