当前位置:网站首页>实战:JVM垃圾回收
实战:JVM垃圾回收
2022-08-05 14:31:00 【summer_west_fish】
一、概述
在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。
新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。
这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。
1、堆的内存模型

从图中可以看出: 堆大小 = 新生代 + 老年代。其中,堆的大小可以通过参数 –Xms、-Xmx 来指定。
2、新生代/老年代
默认的,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ),即:新生代 ( Young ) = 1/3 的堆空间大小。老年代 ( Old ) = 2/3 的堆空间大小。
3、Ede/Survivor
其中,新生代 ( Young ) 被细分为 Eden 和 两个 Survivor 区域,这两个 Survivor 区域分别被命名为 from 和 to,以示区分。
默认的,Eden : from : to = 8 : 1 : 1 ( 可以通过参数 –XX:SurvivorRatio来设定 ),即: Eden = 8/10 的新生代空间大小,from = to = 1/10 的新生代空间大小。
JVM 每次只会使用 Eden 和其中的一块 Survivor 区域来为对象服务,所以无论什么时候,总是有一块 Survivor 区域是空闲着的。
因此,一般新生代可用空间=Eden+from,新生代实际可用的内存空间为 9/10 ( 即90% )的新生代空间。
二、如何设置划分老年代和新生代的大小
方法1:通过前文知道默认的比例,那么设置内存的总大小即可,自动按比例划分
方法2:
-Xms 堆内存的初始大小,默认为物理内存的1/64
-Xmx 堆内存的最大大小,默认为物理内存的1/4
-Xmn 堆内新生代的大小。通过这个值也可以得到老生代的大小:-Xmx减去-Xmn
三、Full GC条件
老年代内存使用率超过92%,直接触发Old GC。这个比例是可以通过参数调整的。
Old GC执行时,一般都会带上一次Y-GC,一般Old GC很可能就是在Young GC之前或之后触发,所以自然Old GC一般都会跟一次Young GC连带关联在一起了。
很多JVM实现里,其实在上述几种条件达到时,他触发的实际上就是Full GC,其实满足上述一些条件时,在GC日志中看到的就是Full GC字样。
但是这个东西其实没办法给大家一个准确的定义,说到底触发Full GC的时候,是先执行Young GC?还是先执行Old GC?不同Full GC触发条件不一样,而且不同JVM版本实现也不同。
所以只能概括:上述条件满足时触发Full GC,Full GC一般会带上一次Young GC 去回收新生代,同时也会有Old GC也回收老年代,还会去回收永久代。
四、8.8 公司大促-用户/积分服务
台湾8.6、东南亚/香港8.7、8.8整个公司,平时1.7倍流量,但实际上高峰时刻能达到3倍流量。
边栏推荐
- 概率论基础 - 9 - 中心极限定理
- web安全入门-安全应急响应演练与报告
- 【CUDA学习笔记】什么是GPU计算
- Postgresql源码(67)LWLock锁的内存结构与初始化
- Matplotlib draws histogram
- Fundamentals of Probability - 14 - Exponential Distribution
- [WCN685X] WCN6856 WiFi 6E设置Open连接失败问题分析及解决方案
- [CUDA study notes] What is GPU computing
- 使用Visual Studio Code Commitizen Suppor规范代码提交
- 软件测试之集成测试
猜你喜欢

sklearn笔记:PCA

NLP 论文领读|无参数机器翻译遇上对比学习:效率和性能我全都要!

【虚拟机数据恢复】Hyper-V虚拟化文件丢失,虚拟化服务器不可用的数据恢复案例
Docker study notes - cluster deployment based on example projects (5) Docker builds MySQL cluster | PXC cluster

LeetCode每日一题(1706. Where Will the Ball Fall)

The power behind | Open up a new experience of intelligent teaching Huayun Data helps Tianchang Industrial School to build a new IT training room

NFT卡牌游戏系统Dapp开发(NFT链游)

深度卷积神经网络是什么,卷积神经网络结构设计

完成原型设计的五个步骤

OneNote 教程,如何在 OneNote 中插入表格并设置其格式?
随机推荐
神经网络的原理和应用,神经网络理论及应用
获取淘宝/天猫购买到商品的订单详情——buyer_order_detail
Orthogonal-Uncorrelated-Independent
中移链EOSJS实战使用
Basics of Probability Theory - 13 - Poisson Distribution (Poisson Distribution)
DevEco Studio配置:自定义头部代码注释
Mahalanobis distance
基于STM32单片机设计指纹考勤机+上位机管理
中金财富炒股怎样线上开户?有没有安全上的问题??
如何写出头条号原创爆文?这几招教你拿下
Redis - Talking about master-slave synchronization
灵活好用的sql monitoring 脚本 part2
Deficiency needs attention
sklearn Notes: PCA
Software Testing Views on Test Platforms
[CUDA study notes] What is GPU computing
概率论基础 - 7 - 特征函数
Docker study notes - cluster deployment based on example projects (5) Docker builds MySQL cluster | PXC cluster
概率论基础 - 10 - 常见概率分布
OpenHarmony像素单位(eTS)