【问题标题】:can we use hard disk space for jvm memory我们可以将硬盘空间用于jvm内存吗
【发布时间】:2016-09-23 17:17:34
【问题描述】:

我们能否为 Java 进程提供比系统上的物理内存更多的堆内存。

示例。 系统有 8 GB 内存。 操作系统消耗比方说 2 GB 内存 我们启动 Java process1 并分配 4 gb ram 我们启动Java process2并分配4 gb ram

如果 ram 中的空间不可用,则 Java 进程使用硬盘缓存以编程方式将未使用的部分保存在内存中。

【问题讨论】:

  • 会非常慢
  • 目前对我来说,如果它很慢也没关系...可以做到吗?
  • 它被称为“交换”,它一直是操作系统的标准功能。
  • 我刚刚尝试从 dll 中“新建”非托管内存区域并写入 2x 1G 浮点数组,一旦 8GB 达到 HDD 使用率就达到 %100 并且鼠标+任务监视器冻结直到我很难重置。
  • JVM 就像任何其他程序一样,所以是的,因为内存分配由您的操作系统管理并且您的操作系统可以交换

标签: java memory


【解决方案1】:
  1. 您应该记住,-Xmx 设置不是 JVM 分配的整个内存。它只是堆的大小(对象空间),还将分配更多空间。对于 -Xmx4G,整个内存分配可以是例如 5Gb。
  2. 您可以将 JVM 内存交换到磁盘,但是您的 JVM 会非常慢。内存清理期间的垃圾收集器通常需要扫描整个内存(甚至是很少使用的区域),因此它会在 GC 周期内进行大量交换。

【讨论】:

  • 今天我们可以放心地假设 SSD 的读取速度非常好,至少 500 MB/s。服务器级超过 1 GB/s。
  • @MarkoTopolnik 它的 RW 访问不是只读的。而现代 RAM 可以处理超过 10GB/s 的速度,因此差异巨大。
  • 由于所有的指针追逐和分支错误预测,实际上它会小于 10 GB/s。考虑到交换对性能的一般预期,慢 10 倍仍然不是很大的差异。
猜你喜欢
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 2010-12-09
  • 2019-02-18
  • 2013-03-28
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
相关资源
最近更新 更多