2011-07-12 69 views
12

假设金钱不是一个限制因素,我想写一个运行在一台功能强大的机器上的Java程序。JVM内存和CPU使用情况的实际限制?

目标是让Java程序尽可能快地运行,而不必交换或转到任何东西的磁盘

假设该计算机具有:的RAM

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

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

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

  • OS进程(内存&线程)限制?
  • JVM内存/堆的限制?
  • JVM线程限制?

感谢, 盖伦

+0

我怀疑Sun的最新服务器JVM for Linux能够很好地利用这个功能(假设没有应用程序级别的瓶颈) - 虽然没有确定的知识。 – antlersoft

回答

8

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

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

你可以用自定义集合来解决这些问题,但它确实是Java应该支持的所有东西。

顺便说一句:你可以购买带有1TB内存和24核心/ 48线程的Dell R910,价格为40K英镑。

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

1

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

操作系统也是一个限制因素:并非所有操作系统都可以很好地处理该内存量。

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

相关问题