假设金钱不是一个限制因素,我想编写一个在一台强大的机器上运行的 Java 程序。
我们的目标是让 Java 程序尽可能快地运行,而无需交换或转到磁盘。
假设这台电脑有:
- 1 TB RAM(64 个 16GB DIMM)
- 64 个处理器内核(8 个 8 核处理器)
- 运行 64 位 Ubuntu
在 JVM 中运行的 Java 程序的单个实例能否利用这么多 RAM 和处理器?
是否有任何实际考虑可能会限制使用和效率?
- 操作系统进程(内存和线程)限制?
- JVM 内存/堆限制?
- JVM 线程限制?
谢谢, 盖伦
最佳答案
单个实例可以尝试访问所有内存,但是 NUMA 区域意味着诸如 GC 之类的事情在访问另一个区域中的内存时表现不佳。这越来越快,并且 JVM 有一些 NUMA 支持,但如果你想要可扩展性,它需要改进。即使这样,您也可以获得 256 MB 的堆并使用 700 个 native /直接内存而不会出现此问题。 ;)
如果您有大量内存,最大的限制是数组、集合和 ByteBuffer(用于内存映射文件)的大小都限制为 20 亿。 (2^31-1)
您可以使用自定义集合解决这些问题,但它确实是 Java 应该支持恕我直言。
顺便说一句:您可以花 4 万英镑购买配备 1 TB 内存和 24 核/48 线程的戴尔 R910。
顺便说一句:我只使用过 40 GB 的 JVM。
关于java - JVM内存和CPU使用的实际限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6667344/