如何使用Java Web编程的虚拟内存(交换在Linux文件系统)
-
19-09-2019 - |
题
我在Java Web应用程序的工作。在一些部分我使用非常巨大的树变量保存在内存持续(RAM)。我可以将此迁移到虚拟内存(交换)。 注意:大树包括姓名和电子邮件,在建议的Ajax文本框中使用的所有用户。
解决方案
有没有在Linux中一种标准的方式迫使存储器块交换的,因此,JVM将不必询问OS的方式执行这样的任务。
您可以做,如果你想要这个功能,是序列树和写入的原始数据到磁盘文件,然后把它带回来,当你准备好了最好的。
但你可能不希望这样,相对于物理内存,因为写入到磁盘的极其慢的I / O。
典型的例子,让这个操作系统的担心。它是安全的假设它知道管理内存比你做的更好的方法。
其他提示
让你的用户正在使用的这种照顾操作系统。
运行中的Java图像部分地页面出到交换是死的java图像。只要在足够的渴望踢GC,你到页面的一切回。在该页面是够糟糕的。如果你实际上并没有对整个事情足够的RAM,你结束了颠簸,服务器的反应迟钝的残骸。分页Java是坏(TM)。
如果您对整个事情足够的RAM,你根本不需要交换。
收起你的列表中的数据库表,在磁盘上,指数它,限制你的结果集,并作出适当的查询反对。这将是一个净赢,和DB可以缓存它最喜欢的网页,所以你不必去想它。
或者得到更多的内存。
我觉得有趣的是每个人都告诉他,在磁盘上存储的项目是非常可怕的ineficient,并在同一时间recomending他使用一个数据库,大概是要在磁盘上存储数据的远程的..另一台机器上..
您的假设系统将更有效率时,盲目处理交换文件比将有由代码影响的交换文件,它知道将来会怎样。它极大地更有效地交换出去,你知道是不是将要用于而不是它是系统考虑所有内存中的项目,并试图有效地把它的一些在该文件中存储。
当然,同时不对,你都一定程度上的权利..本地数据库将数据存储到一个文件中(它会被写入和读取)的最有效的方式。如果你有一个本地数据库,然后一个代码的访问权限。的hashmap被设计为存储在内存和有序索引的链表被设计为存储在磁盘上。试图直接从存储器推到磁盘没有一些考虑两种介质的效率不有效的。
这个怎么样的不同采取同样的问题:我创建了很多PDF文件服务器端的,我已经得到了1000的客户谁通常需要运行在每月的同一时间报道的10的。平均PDF大小可能会7-10Mb。具有可用的有限堆,“交换”的数据输出到一个临时文件是因为我需要之前可以设置在响应中的内容长度的PDF数据流传输到客户端创建的PDF的有效方法。
或许,而不只是质疑设计的一些有用的选项可能会派上用场。亲自我期待在使用每个进程或单个“交换”文件的并发访问任一个临时文件。
您有什么建议?