java - 无限循环 : Java or Shell script

标签 java linux shell

我想通过 shell 脚本无限次执行 Java 代码。为此,我有两个选项。

  1. 使用 while 循环在 Shell 脚本中无限调用 Java 类
  2. 在Java类代码中无限while循环并在Shell脚本中调用一次Java类

哪种方法更好?

最佳答案

基于技术事实的答案:

在你的 shell 脚本中有循环意味着你不断地启动新的 JVM 进程。与在您正在执行的 Java 程序中使用循环相比,这会给您的系统带来更高的负载。

换句话说:您启动一个 JVM session ,它会做一些事情;它下降了;下一个开始……永远。

可能 Linux 在幕后做了很多事情来降低这样做的成本(例如通过实际将事情保存在内存中);但仍然:您不断地开始流程,以在不久之后结束它们。

如果您真的打算“无限”地运行您的代码;比你绝对想避免以任何形式浪费资源。

另一方面,可以为将循环保留在脚本端提供一个(弱的)论据:当您将循环放入 java 代码中,而您的 java 代码实际上是错误的(例如内存泄漏);那么那个 JVM 的内存消耗可能会一直增长(直到达到它的极限;然后你可能会看到大量的垃圾收集)。

意思是:当你知道你的 Java 代码状态不佳时;并且长时间在相同 JVM 中运行它会导致问题;那么当然:启动和停止 JVM 有一些好处。 但是当然 - 在那种情况下,你有一些更大的问题。如果你的 java 应用程序有这样的问题,那么你最好找出它们的根本原因并修复它们;而不是不断启动/停止 JVM 来规避这些问题。

关于java - 无限循环 : Java or Shell script,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41479462/

相关文章:

java - Google Foobar,字符串清理,测试失败 5

java - Linux下的Arduino(RXTX)? - 适用于 Windows

xml - 从自定义 xml 中提取字段

python - 当父 Bash shell 脚本被杀死时停止执行 python 脚本

linux - 目录中行数最多的文件不是字节

Java多线程按顺序获取输出?

java - 如何发布具有未发布依赖项的多模块项目

java - 如何强制 mkdir 覆盖现有目录?

linux - 在 shell 脚本中找不到 Flutter 命令

除非您转到脚本所在的文件夹,否则 PHP 命令不起作用