相关疑难解决方法(0)

Java中的Java比使用C++中的std :: vector快8倍.我做错了什么?

我有几个大型数组的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次因为时间限制.但即使在这里也有三次相差)

c++ java arrays performance stdvector

88
推荐指数
4
解决办法
7612
查看次数

为什么java只允许动态链接?

我正在关注YouTube上关于编译器的教程视频,当时我发现C编程语言更快,因为它允许静态链接和动态链接,但Java只允许动态链接,这就是为什么C比Java快得多的原因.

我的问题是,如果静态链接使程序运行得更快,为什么它不包含在Java中?我知道为什么Java的开发人员决定不包含静态链接必须有一些真正的理由,我只是想知道原因是什么.

注意:我不知道这个问题是否已经在SO上有答案,但由于我找不到,所以我发布了.如果答案已经存在,请提供链接.

注意:提供的教程链接是印地语.对于那个很抱歉.

java compiler-construction dynamic-linking static-linking

6
推荐指数
1
解决办法
2809
查看次数

为什么Java程序的执行要比C中的相同程序花费更多的时间?

因此,我有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)

c java

-2
推荐指数
1
解决办法
138
查看次数