让我们说金钱不是限制因素,我想编写一个在一台强大机器上运行的Java程序。
目标是让Java程序尽可能快地运行,而无需交换或转到磁盘。
假设这台电脑有:
在JVM中运行的java程序的单个实例是否可以利用这么多RAM和处理器?
是否存在可能限制使用和效率的实际考虑因素?
谢谢, 盖伦
答案 0 :(得分:8)
单个实例可以尝试访问所有内存,但NUMA区域意味着诸如GC之类的内容会严重访问另一个区域中的内存。这变得越来越快,JVM有一些NUMA支持,但如果你想要可扩展性,它需要改进。即使如此,您也可以获得256 MB的堆并使用700个本机/直接内存而不会出现此问题。 ;)
如果你有大量内存,最大的限制是数组,集合和ByteBuffer(用于内存映射文件)都限制在20亿的大小。 (2 ^ 31-1)
您可以使用自定义集合解决这些问题,但Java应该支持IMHO。
顺便说一句:您可以以40,000英镑的价格购买带有1 TB内存和24核/ 48线程的戴尔R910和Ubuntu。BTW:我只有JVM最大40 GB的经验。
答案 1 :(得分:1)
首先,Java程序本身:设计不良的代码不会使用那么多的计算机能力。例如,执行不当的线程可能会使您的性能变慢。
操作系统也是一个限制因素:并非所有操作系统都能很好地处理这么多内存。
我认为JVM可以处理大量内存,因为操作系统支持它。