Java JVM内存和CPU使用的实际限制?
假设金钱不是一个限制因素,我想编写一个Java程序,在一台功能强大的机器上运行 我们的目标是使Java程序尽可能快地运行,而无需交换或转到磁盘 假设此计算机具有: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单个实例可以尝试访问所
- 1 TB RAM(64个16GB DIMM)
- 64个处理器核(8个8核处理器)
- 运行64位Ubuntu
- 操作系统进程(内存和线程)限制
- 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能够很好地利用这一点(前提是没有应用程序级瓶颈)——不过没有确切的知识。