繁体   English   中英

Python 与 Java 的 -xms 和 -xmx

[英]Python vs Java's -xms and -xmx

相关问题: 启动 JVM 时的 Xms 和 Xmx 参数是什么?

为什么 Java 程序允许您指定 -xms 和 -xmx? 作为开发人员,为什么我需要知道/担心我的程序将使用多少 cpu/mem?

或者不同角度的同一个问题,为什么不让Python指定这些类型的选项? (在 Python 中工作了 5 年,从来没有这样做过)

这是否与 Python 是解释性语言和 Java 是某种字节码到 JVM 到机器语言有关?
或者也许与垃圾收集的不同方式有关,Java 需要更加警惕内存消耗?

并非所有操作系统都以相同的方式将内存“压力”传达给您正在运行的进程,这意味着几乎从不。 Java 允许您明确限制其内存使用。 Python、Go 和其他一些收集内存的方法有些激进。

这被cgroups复杂化,用于在Docker和Kubernetes下实现容器,它可能会注意到导致malloc()返回NULL,但会导致向您的进程发送信号以杀死它。

FWIW,JVM 为您提供了一种方法(通过-Xmx )来控制虚拟机的内存使用情况,而其他系统只是希望它们适合。 Docker 容器中的 Java 是非常易于管理的,而 Python 或 Go 则更容易出错。 这些都是“好”的技术,但是对容器的限制应该(我希望)推动改进垃圾收集“努力”的表达方式。 :\\

这感觉像是没有答案,为此我不满意。 你可以阅读这篇文章,直到有人发布了一些人们喜欢更好和投票的东西。 一旦出现一些不可避免的抱怨票,我就会删除它。 ;)

我认为这是一个关于java设计模式的问题。 这真的很奇怪,因为 java 主要是唯一严格限制其内存使用的。 它也是唯一一个检查异常的。

我相信这些都是因为java的设计者想要设计一种真正适合企业的语言。 他们正在尽最大努力使其安全。

这是关于内存使用限制的答案: https : //stackoverflow.com/a/3358383/5588279

对于受检异常,也是如此。 设计人员希望强制开发人员处理所有可预期的异常。

好吧,很难说这是否好。 虽然我不喜欢这种设计,因为设计师似乎把我当作菜鸟,但我不得不承认它确实让 java 变得更安全......也许吧?

  1. 我看到 Python 有三代,即第 0 代、第 1 代和第 2 代非常像(不等价,但有些相似)Java 的年轻代、年老代和永久代。
  2. 正如我们所知,这些开关限制了 Java 应用程序的内存使用量。
  3. 同样在 Python 中,虽然我没有看到等效的(或者可能有..),但我看到 gc.set_threshold 来设置阈值( https://docs.python.org/3/library/gc.html )。
  4. 可能是阈值可以设置为通过导致可接受的 GC 进行微调(再次频繁的 GC 不好,但这一切都归结为通过在 Dev env 中进行调整并获得适合曾经自己的应用程序的阈值进行微调) .

只是一个想法!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM