我有几个大型数组的Java代码,它们永远不会改变它们的大小.它在我的计算机上运行1100毫秒.
我用C++实现了相同的代码并使用了std::vector.
在我的计算机上运行完全相同代码的C++实现的时间是8800毫秒.我做错了什么,以便它慢慢地运行?
基本上代码执行以下操作:
for (int i = 0; i < numberOfCells; ++i) {
h[i] = h[i] + 1;
floodedCells[i] = !floodedCells[i];
floodedCellsTimeInterval[i] = !floodedCellsTimeInterval[i];
qInflow[i] = qInflow[i] + 1;
}
Run Code Online (Sandbox Code Playgroud)
它遍历大小约为20000的不同数组.
您可以在以下链接中找到这两种实现:
(在ideone上我只能运行循环400次而不是2000次因为时间限制.但即使在这里也有三次相差)
我正在关注YouTube上关于编译器的教程视频,当时我发现C编程语言更快,因为它允许静态链接和动态链接,但Java只允许动态链接,这就是为什么C比Java快得多的原因.
我的问题是,如果静态链接使程序运行得更快,为什么它不包含在Java中?我知道为什么Java的开发人员决定不包含静态链接必须有一些真正的理由,我只是想知道原因是什么.
注意:我不知道这个问题是否已经在SO上有答案,但由于我找不到,所以我发布了.如果答案已经存在,请提供链接.
注意:提供的教程链接是印地语.对于那个很抱歉.
因此,我有2个程序执行相同的操作,一个用C编写,另一个用Java编写。它们都创建50个线程,并等待所有线程完成,然后终止。
为了了解两个程序之间的时间差,我在Linux中使用了“ time”命令来获取执行时间。
对于C程序,总执行时间为0.020秒,而Java版本花费了0.663秒来完成。
我曾尝试寻找答案,但发现的所有文章(如这 两篇文章)都说Java实际上比C快,我认为这是胡说八道,因此,如果有人可以为我澄清一下,我将不胜感激。 。
谢谢。
这就是C代码的样子。
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
#define N 50
void* tproc(void *arg) {
printf("Thread %d\n", *((int *) arg));
return NULL;
}
int main(int argc, char * argv[]) {
int i;
int targ[N];
pthread_t tid[N];
for(i = 0; i < N; i++) {
targ[i] = i;
if(pthread_create(&(tid[i]), NULL, &tproc, &targ[i]) != 0) {
printf("Can't create thread %d\n", i);
return 1;
}
}
for(i = 0; i < N; i++) {
if(pthread_join(tid[i], NULL) != …Run Code Online (Sandbox Code Playgroud)