Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 运行同一程序的多个实例会降低所有实例的运行速度_Java_Performance - Fatal编程技术网

Java 运行同一程序的多个实例会降低所有实例的运行速度

Java 运行同一程序的多个实例会降低所有实例的运行速度,java,performance,Java,Performance,我有一个单线程程序,当单独运行时,它利用了将近100%的CPU。如果我在单独的提示下实例化多个实例,它们的速度都会大大降低(大约8倍)。我在Ubuntu12.04上运行jre版本1.7.0_25,采用Intel®内核™ i7-3930K CPU@3.20GHz×12和64 GB RAM。是什么导致了减速?当然,这些程序不可能竞争同一个CPU。而且,我总是确保我运行的实例少于内核。我很欣赏你的见解。 谢谢 Suresh每个实例创建一个单独的JVM,它具有不同的初始堆(由-Xms JVM参数定义)和

我有一个单线程程序,当单独运行时,它利用了将近100%的CPU。如果我在单独的提示下实例化多个实例,它们的速度都会大大降低(大约8倍)。我在Ubuntu12.04上运行jre版本1.7.0_25,采用Intel®内核™ i7-3930K CPU@3.20GHz×12和64 GB RAM。是什么导致了减速?当然,这些程序不可能竞争同一个CPU。而且,我总是确保我运行的实例少于内核。我很欣赏你的见解。 谢谢
Suresh

每个实例创建一个单独的JVM,它具有不同的初始堆(由-Xms JVM参数定义)和程序资源。如果实例太多,操作系统会将内存交换到磁盘,CPU的上下文会在java进程之间不断切换,这并不奇怪。

这些程序会做什么?他们所依赖的任何外部资源?(例如数据库、网络、文件系统)如果不知道程序的功能,很难说。但是CPU并不是程序所需要的唯一资源。内存、硬盘、网络:如果多个程序同时访问它们,它们会变慢。你能简单地描述一下这个程序使用什么以及它在做什么吗?从这一点来看,有很多可能的答案,但由于缺乏信息,其中任何一个都只是猜测。关于“同一个CPU”:您只有6个真正的内核,但每个内核或多或少都有一个CPU内部线程调度程序,因此看起来好像有两倍多的内核。因此,每个实际内核100%的1个线程可能与每个实际内核100%的2个线程的总体性能相当接近。(比较i5和i7基准测试,它们的总体性能不会翻倍)好的,更多细节。该程序从图像中拾取随机平方区域(蒙特卡罗),该图像在程序启动时加载到内存中一次,并使用斐济库计算图像上的某些特征。在将结果写入.csv文件之前,每个实例将区域的边作为(wxh)参数,并计算每个随机选择的区域上的特征,计算指定的次数。因此,它确实取决于网络/磁盘,一次是在启动时(通过网络读取映像),另一次是在结束时写入结果。我要求最大堆大小为10g,最小堆大小为默认值:uintx InitialHeapSize:=1046179712。在启动这些程序之前,我的机器上通常有70%以上的64G RAM可用。所以,我很有信心它不可能被交换。