可以说,金钱不是一个限制因素,我想编写一个在一台功能强大的计算机上运行的Java程序。

目的是使Java程序尽可能快地运行,而不必为任何事情交换或转到磁盘

假设这台计算机具有:

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

  • 运行在JVM中的Java程序的单个实例能否利用这么多的RAM和处理器?

    是否有任何实际的考虑因素可能会限制使用和效率?
  • OS进程(内存和线程)限制?
  • JVM内存/堆限制?
  • JVM线程限制?

  • 谢谢,
    盖伦

    最佳答案

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

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

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

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

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

    关于java - JVM内存和CPU使用率的实际限制?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6667344/

    10-11 22:05
    查看更多