时间:2021-05-19
众所周知,Java进程在启动的时候我们可以通过 -Xms 和-Xmx来设置内存的上限和下限。直到我发现使用top命令监控的Java进程在-Xms设置4g的情况下占用的内存并不是4g,这就产生了一个疑问Linux服务器的内存到底是如何进行分配的。
于是乎,我查阅了一些知乎,课程以及Linux相关的书籍。这里分享并记录的一下相关的知识。
在Linux上运行的进程不仅限于Java。都有一个概念,逻辑内存(Logic Memory),而物理机真是持有的内存,我们称为 物理内存(Physic Memory)。
进程在开始运行时并不会直接分配物理内存,进程只是傻乎乎的以为自己持有了内存,也就是逻辑内存。当程序运行需要内存分配的时候,Linux服务器会以页的(Page)至小4k的方式分配,并一对一映射物理内存和逻辑内存的关系,看到了吗这里其实用了代理的思想是得内存的分配进行了解耦。
这样做的好处是什么呢? 1进程之间相互隔离 2进程自己认为占有了一段独立连续的内存 3可以申请比物理内存更大的内存空间。
第三点怎么理解呢?其实Linux在这里设计了一种机制叫Swap 就是在进程分配的内存空间超过物理内存的时候,如果各个进程运行所占的内存真的有这么多,超过了物理内存就会触发Swap,把不持有CPU的部分进程的内存数据和磁盘进行io数据交换。因为CPU一时间不可能超过所有占有的内存,所以这种优化就造就了能多申请一些内存,大概是原来内存的2-3倍,这就很可观了,毕竟内存是非常贵的。
Swap虽然好,也带来了一些问题。
比如频繁的Swap,这会导致内存操作转化为磁盘的的IO操作,拖慢应用进程的运行速度。所以说Swap在我的理解里属于可以应急不使进程崩溃,适当使用可以减少成本,过分了不当人的使用就会被反噬的机制。
当然如果太不当人,进程还是会崩溃了,Swap是一个类似Buffer的机制,有大小的。超过设置的上限,Kernel内核就会触发OOM Killer,杀死一部分进程腾空间。
以上就是java 进程是如何在Linux服务器上进行内存分配的的详细内容,更多关于java 进程内存分配的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Linux服务器分配真实与虚拟内存给处理器,通过交换管理内存使用率。明白Linux内存类型以及处理器如何共享内存有助于优化内存使用率。从Linux内核start
Jenkins是用java编写的开源持续集成工具,目前被国内外各公司广泛使用。本章教大家如何在linux服务器上安装Jenkins。一、获得一台linux服务器
Linux用户进程是如何释放内存的Linux进程使用内存的基本流程:从图中我们可以看出,进程的堆,并不是直接建立在Linux的内核的内存分配策略上的,而是建立在
云服务器内存不足如何处理?云服务器内存,是其配置参数之一。内存大小也是影响服务器性能的一个重要因素。如果内存太小,系统进程会被阻塞,应用程序会变慢甚至没有响应。
vsftpd是一个对UNIX系统遵循GPL协议的FTP服务器,包括Linux。它安全而且速度非常快。本教程将告诉你如何在Linux系统中搭建自己的FTP服务器。