JVM内存和CPU使用的实际限制?

时间:2011-07-12 16:03:58

标签: java linux memory operating-system jvm

让我们说金钱不是限制因素,我想编写一个在一台强大机器上运行的Java程序。

目标是让Java程序尽可能快地运行,而无需交换或转到磁盘

假设这台电脑有:

  • 1 TB RAM(64个16GB DIMM)
  • 64个处理器内核(8个8核处理器)
  • 运行64位Ubuntu

在JVM中运行的java程序的单个实例是否可以利用这么多RAM和处理器?

是否存在可能限制使用和效率的实际考虑因素?

  • 操作系统进程(内存和线程)限制?
  • JVM内存/堆限制?
  • JVM线程限制?

谢谢, 盖伦

2 个答案:

答案 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可以处理大量内存,因为操作系统支持它。