jvm调优-swap内存交换
swap原理
swap就是内存交换的意思。
计算机对内存分为物理内存与虚拟内存。物理内存就是计算机的实际内存大小,虚拟内存则是从磁盘空间开辟出一部分内存空间虚拟出来的,所以也叫磁盘缓存。虚拟内存的出现,让机器内存不够的情况得到部分解决。程序运行的时候系统会在虚拟内存与物理内存直接进行替换和加载。这里的虚拟内存就是swap。
进程运行的时候系统会判断当前物理内存是否还有空闲,如果有那么则直接调入内存进行运行;如果没有,那么会根据优先级选择一个进程挂起,把该进程交换到swap中等待,然后把新的进程调入到内存中运行。
进程向系统请求内存发现不足时,系统会把内存中暂时不用的数据交换出去,放在swap分区里,这个过程称为swap out(so)当进程又需要这些数据且系统发现还有空闲物理内存时,又会把SWAP分区中的数据交换到物理内存中,这个过程称为swap in(si)
swap使用完,操作系统会触发OOM-Killer机制,杀掉占用内存最大的进程。所以大家经常会发现内存飙高之后进程莫名其妙的不见了。。。。
jvm与swap的关系
1:系统内存足够(jvm内存未使用到swap内存),但jvm内存不够,最终导致jvm的频繁垃圾回收(FGC),由于fullgc时间很久,会导致线程的长期暂停
2:系统内存不够,JVM堆内存部分用到了swap,此时的垃圾回收需要把swap的内存交换到系统物理内存再进行jvm的垃圾回收。导致每次GC的时间都变得很久
3:物理内存不够用,大量JVM的堆内存被交换到swap之后,垃圾回收时把swap内存交换到物理内存,但swap的内存又不会立即交换回来。此时swiap使用的内存占用会变大,可能会导致oom killer
__EOF__

本文链接:https://www.cnblogs.com/liu-jin/p/17250075.html
关于博主:hello~好久不见,喜欢的话点个赞吧
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)