Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java web编程中使用虚拟内存(linux文件系统中的交换)_Java_Web Applications_Virtual Memory_Swapfile - Fatal编程技术网

如何在java web编程中使用虚拟内存(linux文件系统中的交换)

如何在java web编程中使用虚拟内存(linux文件系统中的交换),java,web-applications,virtual-memory,swapfile,Java,Web Applications,Virtual Memory,Swapfile,我在java web应用程序中工作。在某些部分中,我使用了非常大的树变量来保存和保存内存(RAM)。我可以将其迁移到虚拟内存(交换)吗。 注意:巨大的树形结构包含所有在Ajax文本框中使用的用户的名称和电子邮件 让您的用户使用的操作系统来处理这个问题 Linux中没有强制交换内存块的标准方法,因此JVM无法要求操作系统执行这样的任务 如果需要此功能,最好是序列化树并将原始数据写入磁盘文件,然后在准备就绪时将其带回 但您可能不希望这样,因为与物理内存i/o相比,写入磁盘的速度非常慢 举个例子,让操

我在java web应用程序中工作。在某些部分中,我使用了非常大的树变量来保存和保存内存(RAM)。我可以将其迁移到虚拟内存(交换)吗。
注意:巨大的树形结构包含所有在Ajax文本框中使用的用户的名称和电子邮件

让您的用户使用的操作系统来处理这个问题

Linux中没有强制交换内存块的标准方法,因此JVM无法要求操作系统执行这样的任务

如果需要此功能,最好是序列化树并将原始数据写入磁盘文件,然后在准备就绪时将其带回

但您可能不希望这样,因为与物理内存i/o相比,写入磁盘的速度非常慢


举个例子,让操作系统来担心这一点。可以肯定的是,它比您更了解管理内存的方法。

您的操作系统会自动管理自己的内存,并根据需要将内容推送到交换文件

如果你有很多数据,你可能想考虑把你的数据存储在一个数据库中而不是一个大内存树中。这可能会使您的应用程序具有更好的可扩展性,也可能会提高性能--无论何时您需要查找或修改记录,这肯定会比将整个结构读写到磁盘提供更好的性能


编辑:您不必设置专用的数据库机器。考虑到您当前正试图将所有数据存储在内存中,您可能可以使用可嵌入的数据库,如或,其大小限制分别为16 GB和2Tb。

一个正在运行的java映像部分分页以交换,这是一个死java映像。一旦一个足够热切的GC启动,您就可以将所有内容重新分页。中的页面已经够糟糕的了。如果你没有足够的内存来完成整个过程,你最终会导致服务器崩溃,没有响应。分页Java不好(tm)

如果你有足够的内存来处理整个事情,你根本不需要交换

将列表放入磁盘上的数据库表中,对其编制索引,限制结果集,并对其进行适当的查询。这将是一个净胜利,数据库可以缓存它最喜欢的页面,所以你不必考虑它


或者获得更多的RAM。

我发现有趣的是,每个人都在告诉他,在磁盘上存储项目是非常无效的,同时建议他使用一个数据库,可能是一个将在磁盘上存储数据的远程数据库。。在另一台机器上

您假设盲目地处理交换文件比让交换文件受知道未来会发生什么的代码的影响更有效。交换一段时间内不会使用的内存要比系统查看内存中的所有项并尝试有效地将其中的一部分放入该文件要高效得多


当然,虽然你们都错了,但都有点对。。本地数据库将是将数据存储到文件(在其中写入和读取数据)的最有效方式。如果您无法访问本地数据库,请编写一个。哈希映射被设计为存储在内存中,有序索引链表被设计为存储在磁盘上。如果不考虑两种介质的效率而试图直接从内存推送到磁盘上,那将是无效的。

对于同一个问题,这是一种不同的看法:我正在创建大量的PDF服务器端,我有1000个客户机中的10个,他们通常希望在每月的同一时间运行报告。平均PDF大小可能为7-10Mb。在有限堆可用的情况下,“交换”数据到临时文件是创建PDF的有效方法,因为我需要能够在将PDF数据流传输到客户端之前设置响应的内容长度

也许一些有用的选项会很方便,而不仅仅是质疑设计。就我个人而言,我希望每个进程使用一个临时文件,或者同时访问一个“交换”文件


您有什么建议?

您应该问自己“为什么?”如果您处理大量数据,并将其视为一个整体,将完全在内存中或内存中分页,那么您的设计可能需要重新考虑。@SjB:您不能使用数据库是否有技术原因,或者更像是系统管理问题?我编辑了我的文章,其中包含了一些数据库的链接,这些数据库应该非常容易使用,没有任何混乱的安装;但是,一般来说,您应该优化应用程序,使其不需要同时在内存中保存所有数据。对于ajax建议,请尝试限制结果数量(用户可以通过键入用户名的一部分查看更多内容)或创建某种分页系统。您还可以使对象更轻量级(例如:不存储UserEmailObject树,而是存储一个HashMap,将用户映射到电子邮件地址,并使用循环或光标填充)。“让操作系统来担心这一点。可以肯定的是,它知道一种比你更好的管理内存的方法。