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

Java JVM内存和CPU使用的实际限制?,java,linux,memory,operating-system,jvm,Java,Linux,Memory,Operating System,Jvm,假设金钱不是一个限制因素,我想编写一个Java程序,在一台功能强大的机器上运行 我们的目标是使Java程序尽可能快地运行,而无需交换或转到磁盘 假设此计算机具有: 1 TB RAM(64个16GB DIMM) 64个处理器核(8个8核处理器) 运行64位Ubuntu 在JVM中运行的java程序的单个实例能否利用如此多的RAM和处理器 是否存在任何可能限制使用和效率的实际考虑因素 操作系统进程(内存和线程)限制 JVM内存/堆限制 JVM线程限制 谢谢, Galen单个实例可以尝试访问所

假设金钱不是一个限制因素,我想编写一个Java程序,在一台功能强大的机器上运行

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

假设此计算机具有:

  • 1 TB RAM(64个16GB DIMM)
  • 64个处理器核(8个8核处理器)
  • 运行64位Ubuntu
在JVM中运行的java程序的单个实例能否利用如此多的RAM和处理器

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

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

单个实例可以尝试访问所有内存,但是NUMA区域意味着GC之类的东西在访问另一个区域的内存时表现不佳。这正变得越来越快,JVM有一些NUMA支持,但如果您想要可伸缩性,它需要改进。即使如此,您也可以获得256 MB的堆,并使用700个本机/直接内存,而不会出现此问题。;)

如果您有内存负载,最大的限制是数组、集合和ByteBuffer(用于内存映射文件)的大小都限制为20亿。(2^31-1)

您可以使用自定义集合解决这些问题,但Java确实应该支持IMHO

顺便说一句:你可以用4万英镑的价格购买一台带有1 TB内存和24核/48线程的Dell R910


顺便说一句:我只有40 GB大小的JVM的经验。

首先,Java程序本身:设计糟糕的代码不会使用那么多计算机功能。例如,执行不好的线程可能会使性能变慢

操作系统也是一个限制因素:并非所有操作系统都能很好地处理这么多的内存


我认为JVM可以处理这么大的内存,因为操作系统支持它。

我怀疑Sun最新的Linux服务器JVM能够很好地利用这一点(前提是没有应用程序级瓶颈)——不过没有确切的知识。