交换内存能被java直接读取吗?

交换内存能被java直接读取吗?

当内核将内容交换到磁盘时,进程随后是否可以直接从交换中读取这些数据?或者必须将其放回到物理 RAM 中(从而在 vmstat 中生成 si so 活动)

我有一个 Java 进程,它似乎在交换中有很多数据(https://paste.fedoraproject.org/542447/raw/) 当我执行它时它真的很慢,但我没有看到任何 si so 活动。

重新启动该过程后,它又变得非常快,并且 smaps 现在在 Swap 中列出了 0 个字节。

Vmstat 信息:https://paste.fedoraproject.org/542453/raw/

谢谢你,

答案1

进程(包括 Java)并不知道它们的内存位于何处。Java 只知道它试图访问内存位置 0x00234525。当内核发现访问时,它会将值从 RAM 中返回,或者将内存从交换页面调入 RAM 并从 RAM 返回值。必须先将页面读入 RAM,然后才能访问它。

话虽如此,一行 vmstat 显示整个正常运行时间的平均值并不是很有用。vmstat 5在进程运行时运行以查看实时数据。

相关内容