JVM 内存区域大小参数设置
需要提前了解的知识点:
1. JVM内存模型
2. JVM垃圾回收算法
下图是JVM内存区域划分的逻辑图
从图中我们大概了解JVM相关的内存区域。
JVM内存包括区域
Heap(堆区)
- New Generation(新生代)
- Eden
- Survivor From
- Survivor To
- Old Generation(老年代)
- New Generation(新生代)
方法区
- Permanent Generation(持久代)
- Stack(栈区)
- Metaspace(元空间)
- 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的最大值保护一下。
- 默认情况下,类元数据分配受到可用的本机内存容量的限制(容量依然取决于你使用32位JVM还是64位操作系统的虚拟内存的可用性)。
- 一个新的参数 (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 内存区域大小参数设置相关推荐
- JVM之JVM内存区域与内存分配(转载)
2019独角兽企业重金招聘Python工程师标准>>> 先来看看JVM运行时候的内存区域 大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区),He ...
- 73.JVM内存基础结构,参数分类,推荐的配置项,参数混用问题,常用工具,常用命令
73.JVM内存基础结构,参数分类,推荐的配置项,参数混用问题,常用工具,常用命令 73.1.堆内存基本结构 73.2.参数分类 73.3.推荐的配置项 73.4.参数混用问题 73.5.常用命令 7 ...
- 深入理解JVM内存区域与内存分配
前言:这是一篇关于JVM内存区域的文章,由网上一些有关这方面的文章和<深入理解Java虚拟机>整理而来,所以会有些类同的地方,也不能保证我自己写的比其他网上的和书本上的要好,也不可能会这样 ...
- 深入理解JVM之JVM内存区域与内存分配
在学习jvm的内存分配的时候,看到的这篇博客,该博客对jvm的内存分配总结的很好,同时也利用jvm的内存模型解释了java程序中有关参数传递的问题. 博客出处: http://www.cnblogs. ...
- JVM内存区域(Java内存区域)、JVM垃圾回收机制(GC)初探
一.JVM内存区域(Java内存区域) 首先区分一下JVM内存区域(Java内存区域)和Java内存模型(JMM)的概念.Java线程之间的通信采用的是共享内存模型,这里提到的共享内存模型指的就是Ja ...
- 《探索JVM内存区域》
一.为什么要了解JVM内存区域 二.结识JVM中的"内存"成员 1. 程序计数器(PC=Program Counter Register) 2. JVM栈(Java Virtual ...
- 深入解剖JVM内存区域
不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨-[https://blog.csdn.net/cjm2484836553/article/details/103528907] 深入解剖J ...
- 走进JVM【二】理解JVM内存区域
引言 对于C++程序员,内存分配与回收的处理一直是令人头疼的问题.Java由于自身的自动内存管理机制,使得管理内存变得非常轻松,不容易出现内存泄漏,溢出的问题. 不容易不代表不会出现问题,一旦内存泄漏 ...
- Java虚拟机------JVM内存区域
JVM内存区域运行时数据区域分为两种: JVM内存区域 运行时数据区域分为两种: 线程隔离的数据区: 程序计数器 Java虚拟机栈 本地方法栈 所有线程程共享的数据区: Java堆 方法区 JVM 内 ...
最新文章
- linux apt-get update 和 upgrade 的区别
- 【字符串处理算法】最长连续字符及其出现次数的算法设计及C代码实现
- QT的QBarCategoryAxis类的使用
- eslint检测node 内部模块报错解决方案
- IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
- python--从入门到实践--chapter 9 类
- 动态加载TreeView
- 我是如何查找RFC官方资料的
- 继承单例模式 php_解决 PhpStorm 对 用单例模式实例化PHP类时,代码自
- 软件系统安全测试和性能测试的区别,【安全测试】性能测试进阶——基本概念篇...
- Nginx学习总结(13)——Nginx 重要知识点回顾
- 苹果公司发布TestFlight Groups,放宽二进制版本提交限制
- Java 学习笔记(官方不推荐写法篇)
- 141.3. 单机安装 CentOS 5 + hadoop-0.20.0
- w.php k,W/ (K·m)应读作( )。
- 西门子S7系列PLC的主要种类及应用软件
- tf.contrib.layers.embed_sequence()函数
- 最全教程----window11下 远程控制 云服务器CentOS7 并搭建上灯塔(1)
- java销毁servlet_servlet一般什么时候销毁
- 光模块协议之8436
热门文章
- 曝鸿蒙os手表,华为Watch GT 2曝光:第一款使用鸿蒙OS的智能手表
- 直播 | 帝国理工王剑虹:配电网中用多智能体强化学习进行的主动电压控制
- CVPR 2019 | 无监督领域特定单图像去模糊
- Google论文解读:轻量化卷积神经网络MobileNetV2 | PaperDaily #38
- BZOJ2131免费的馅饼 DP+树状数组
- dataset_flickr8k.json与dataset_flickr30k.json的比较
- Linux c modbus 线程,Modbus读写模拟量寄存器详解
- Java 过滤器解决URLSQL注入漏洞、跨站漏洞、框架注入漏洞、链接注入漏洞
- TensorFlow——本地加载fashion-mnist数据集
- Postman——导出测试接口集合的Collection文件