我在Java Web应用程序的工作。在一些部分我使用非常巨大的树变量保存在内存持续(RAM)。我可以将此迁移到虚拟内存(交换)。 注意:大树包括姓名和电子邮件,在建议的Ajax文本框中使用的所有用户。

有帮助吗?

解决方案

有没有在Linux中一种标准的方式迫使存储器块交换的,因此,JVM将不必询问OS的方式执行这样的任务。

您可以做,如果你想要这个功能,是序列树和写入的原始数据到磁盘文件,然后把它带回来,当你准备好了最好的。

但你可能不希望这样,相对于物理内存,因为写入到磁盘的极其慢的I / O。

典型的例子,让这个操作系统的担心。它是安全的假设它知道管理内存比你做的更好的方法。

其他提示

让你的用户正在使用的这种照顾操作系统。

运行中的Java图像部分地页面出到交换是死的java图像。只要在足够的渴望踢GC,你到页面的一切回。在该页面是够糟糕的。如果你实际上并没有对整个事情足够的RAM,你结束了颠簸,服务器的反应迟钝的残骸。分页Java是坏(TM)。

如果您对整个事情足够的RAM,你根本不需要交换。

收起你的列表中的数据库表,在磁盘上,指数它,限制你的结果集,并作出适当的查询反对。这将是一个净赢,和DB可以缓存它最喜欢的网页,所以你不必去想它。

或者得到更多的内存。

您的操作系统自动管理它自己的内存,并推动事情了根据需要交换文件。

如果你有大量的数据,你可能要考虑存储在数据库中,而不是一个巨大的内存树您的数据。这可能会使得你的应用程序变得更好,而且还可以提高性能 - 它肯定会给你更好的性能比阅读和写作的整个结构到磁盘每当你需要查看或修改记录

编辑:你不一定要成立一个专门的数据库机器。鉴于你目前正试图在内存中存储的所有数据,现在,你也许可以使用嵌入式数据库如 HSQLDB 的SQLite ,该具有16 GB和2TB的大小限制,分别

我觉得有趣的是每个人都告诉他,在磁盘上存储的项目是非常可怕的ineficient,并在同一时间recomending他使用一个数据库,大概是要在磁盘上存储数据的远程的..另一台机器上..

您的假设系统将更有效率时,盲目处理交换文件比将有由代码影响的交换文件,它知道将来会怎样。它极大地更有效地交换出去,你知道是不是将要用于而不是它是系统考虑所有内存中的项目,并试图有效地把它的一些在该文件中存储。

当然,同时不对,你都一定程度上的权利..本地数据库将数据存储到一个文件中(它会被写入和读取)的最有效的方式。如果你有一个本地数据库,然后一个代码的访问权限。的hashmap被设计为存储在内存和有序索引的链表被设计为存储在磁盘上。试图直接从存储器推到磁盘没有一些考虑两种介质的效率不有效的。

这个怎么样的不同采取同样的问题:我创建了很多PDF文件服务器端的,我已经得到了1000的客户谁通常需要运行在每月的同一时间报道的10的。平均PDF大小可能会7-10Mb。具有可用的有限堆,“交换”的数据输出到一个临时文件是因为我需要之前可以设置在响应中的内容长度的PDF数据流传输到客户端创建的PDF的有效方法。

或许,而不只是质疑设计的一些有用的选项可能会派上用场。亲自我期待在使用每个进程或单个“交换”文件的并发访问任一个临时文件。

您有什么建议?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top