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

标签 java linux memory operating-system jvm

假设金钱不是一个限制因素,我想编写一个在一台强大的机器上运行的 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/

相关文章:

java - 并发修改异常

Java多线程和迭代器,应该很简单,初学者

linux - vxworks 中的任务

Java内存泄漏,只有Jenkins运行,Jenkins .war分析显示没有什么奇怪的

java - 内存分析器

java - 如何从 Class<T> 推断 T 的方法

Java 国家数组

php - 从 php 调用时,将 RPi.GPIO 导入为 GPIO 在 python 中不起作用

c - 将库中的专用 ELF 部分合并到应用程序专用 ELF 部分

c++ - C++非指针数据成员在指针类实例中的分配是在堆上还是在栈上