Python与Java的-xms和-xmx

时间:2019-01-27 05:55:43

标签: java python

相关问题:What are the Xms and Xmx parameters when starting JVMs?

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

还是不同角度的相同问题,为什么不让Python指定这些类型的选项? (在Python中工作了5年,而且从未这样做)

这与Python是解释语言而Java是某种JVM到机器语言的字节码吗?
还是与垃圾回收方式有所不同有关,Java需要更加警惕内存消耗?

3 个答案:

答案 0 :(得分:4)

并非所有的操作系​​统都以相同的方式将内存“压力”传达给正在运行的进程,这几乎没有。 Java让您明确限制其内存使用量。 Python,Go和其他应用程序具有收集内存的积极方法。

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

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

这感觉像是没有答案,对此我感到不满意。您可以阅读此书,直到有人发布喜欢和赞成的人的名字。一旦出现一些不可避免的脾气暴躁的投票,我将删除它。 ;)

答案 1 :(得分:1)

我认为这是关于Java设计模式的问题。真的很奇怪,因为Java通常是唯一一个严格限制其内存使用的程序。而且它也是大多数唯一一个已检查异常的程序。

我相信所有这些都是因为Java的设计师想要设计一种真正适合企业的语言。他们正在尽最大努力使它变得安全。

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

对于检查的异常,这是相同的。设计师希望强迫开发人员处理 每个可预期的例外。

好吧,很难说这是否好。尽管我不喜欢这种设计,因为设计师似乎把我当作菜鸟,但我不得不承认,它确实使Java更安全……也许?

答案 2 :(得分:0)

  1. 我看到Python有3个世代,即第0、1和2世代与Java的年轻,古老和烫发世代非常相似(不相同,但有些相似)。
  2. 我们知道这些开关限制了Java应用程序的内存使用量。
  3. 类似地,在Python中,虽然我看不到等效项(或可能存在..),但我看到gc.set_threshold来设置阈值(https://docs.python.org/3/library/gc.html)。
  4. 可以通过设置可接受的GC来将阈值设置为微调(同样,频繁使用的GC也不好,但是可以通过在Dev env中玩转并获得适合一次的阈值来精调)自己的应用程序。)

只是一个想法!