gpt4 book ai didi

java - 为什么这个小小的 Java 程序会占用如此多的时间和内存?

转载 作者:行者123 更新时间:2023-11-30 03:57:29 25 4
gpt4 key购买 nike

所以我正在做在线编程挑战题,这样我才能成为一名更好的程序员。我是初学者。我所做的问题的范围是编写一个程序,从输入流中读取数字并计算数字阶乘中零的数量。我写的程序通过了网上的判断,是正确的。当您通过问题时,它会为您提供有关您的程序的数据。这是我的代码,后面是数据和我的问题。这是我想出并写下的内容:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

int n = -1, count = 0;

//first number is an int that tells us how many numbers are in the input
//(how many numbers we need to run the algorithm on)

Scanner sc = new Scanner( System.in );
int bound = sc.nextInt();

//for each number in the input
for (int i = 0; i < bound; i++) {

n = sc.nextInt(); //read the number

count = 0; //set number of 0's in that factorial to 0

int multipleOfFive = 5; //start counting number of multiples of 5

while (n / multipleOfFive > 0) {

//add the number of times this multiple of 5 goes into the number

count += n / multipleOfFive;

multipleOfFive *= 5; //get next factor of 5

}

System.out.println(count); //print this numbers solution

}

sc.close(); //close the scanner
}
}

系统返回我的程序的以下数据:

memory usage: 5512k, time: 1375ms

我将其与正确提交此问题的其他用户进行了比较,他们的范围如下:

memory usage: 144k - 228k, time: 125ms - 625ms

我对时代的不同感到有点惊讶。我不知道怎样才能减少那么多时间。所以我的问题是......我可以做些什么明显的事情来改进这个程序以获得更少的时间和更少的内存使用量?使用 Scanner 类是一个坏主意吗?我尝试研究不同的 I/O 类,但没有发现任何看起来非常有希望改善空间或时间的东西。如果有人有任何有用的建议,请说出来。澄清一下,问题不在于算法如何工作。问题是如何让它变得更好。谢谢。

更新:他们可以用 C、C++ 或 Java 编写代码。所以我想我的问题的一部分是这样的:做一些像用 C 或 C++ 编写完全相同的事情这样简单的事情是否足以将运行时间减少一半(假设在同一台计算机上)和/或消除虚拟机足以显着减少内存使用吗?为了澄清这一点,我列出的数据是程序使用了多少内存以及执行所需的总时间(以毫秒为单位)。

最佳答案

现在我知道您将数字与 (C/C++) 进行比较,您几乎无法减少所看到的内容。

Java 与 C/C++ 的不同之处在于,每次执行应用程序时,它都会启动一个完整的 Java 虚拟机 (JVM)。仅此一点就会产生更多的内存需求并消耗启动时间。这是 Java 的一个事实,但考虑到大多数机器的大量内存以及大多数 Java 应用程序都是长时间运行的进程这一事实,这通常不是一个问题。对于如此长时间运行的进程,额外增加几秒的启动时间并不是问题。

从好的方面来说,编译的 jar 文件将在任何具有 JVM 的操作系统上运行,而编译的 C/C++ 应用程序不具备该功能,需要针对每个平台/操作系统组合专门进行编译。

关于java - 为什么这个小小的 Java 程序会占用如此多的时间和内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22817730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com