Java 我们可以用硬盘空间存储jvm内存吗

Java 我们可以用硬盘空间存储jvm内存吗,java,memory,Java,Memory,我们可以给Java进程提供堆内存而不是系统上的物理ram吗 例如。 系统有8GB内存。 操作系统消耗2 gb内存 我们启动Java process1并分配4 gb ram 我们启动JavaProcess2并分配4GBRAM 若ram中的空间不可用,那个么Java进程将使用硬盘缓存以编程方式将内存中未使用的部分保存到内存中 您应该记住,-Xmx设置并不是JVM分配的全部内存。这只是堆的大小(对象的空间),还将分配更多的空间。例如,对于-Xmx4G,整个内存分配可以是5Gb 您可以将JVM内存交换到

我们可以给Java进程提供堆内存而不是系统上的物理ram吗

例如。 系统有8GB内存。 操作系统消耗2 gb内存 我们启动Java process1并分配4 gb ram 我们启动JavaProcess2并分配4GBRAM

若ram中的空间不可用,那个么Java进程将使用硬盘缓存以编程方式将内存中未使用的部分保存到内存中

  • 您应该记住,-Xmx设置并不是JVM分配的全部内存。这只是堆的大小(对象的空间),还将分配更多的空间。例如,对于-Xmx4G,整个内存分配可以是5Gb
  • 您可以将JVM内存交换到磁盘中,但这样您的JVM将非常慢。内存清理期间的垃圾收集器通常需要扫描整个内存(即使是很少使用的区域),因此它在GC循环期间会进行大量交换
  • 您应该记住,-Xmx设置并不是JVM分配的全部内存。这只是堆的大小(对象的空间),还将分配更多的空间。例如,对于-Xmx4G,整个内存分配可以是5Gb
  • 您可以将JVM内存交换到磁盘中,但这样您的JVM将非常慢。内存清理期间的垃圾收集器通常需要扫描整个内存(即使是很少使用的区域),因此它在GC循环期间会进行大量交换

  • 这将是非常缓慢的我目前它的好,如果它是缓慢的。。。有可能吗?这叫做“交换”,从永远都是OSs的标准功能。我只是尝试从dll中“新建”非托管内存区域并写入2x 1G浮点数组,一旦8GB硬盘使用率达到%100,鼠标+任务监视器冻结,直到我硬重置。JVM就像任何其他程序一样,所以是的,这是可能的,因为内存分配是由您的操作系统管理的,并且您的操作系统可以互换,这将非常慢。对于我来说,当前速度很慢没关系。。。有可能吗?这叫做“交换”,从永远都是OSs的标准功能。我只是尝试从dll中“新建”非托管内存区域并写入2x 1G浮点数组,一旦8GB硬盘使用率达到%100,鼠标+任务监视器冻结,直到我硬重置。JVM与任何其他程序一样,所以是的,这是可能的,因为内存分配由您的操作系统管理,并且您的操作系统可以交换。我们可以安全地假设SSD非常擅长读取,至少500 MB/s。服务器类的速度远远超过了1 GB/s。@MarkoTopolnik它是RW访问,而不是只读的。现代的RAM可以处理超过10GB/s的数据,所以差异很大。实际上,由于所有的指针追踪和分支预测失误,它将小于10GB/s。考虑到交换对性能的影响,10倍的速度仍然不是很大的区别。今天,我们可以放心地假设SSD在读取方面相当出色,至少500 MB/s。服务器类的速度远远超过了1 GB/s。@MarkoTopolnik它是RW访问,而不是只读的。现代的RAM可以处理超过10GB/s的数据,所以差异很大。实际上,由于所有的指针追踪和分支预测失误,它将小于10GB/s。考虑到交换对性能的影响的一般预期,10倍的速度仍然不是很大的区别。