相关问题:What are the Xms and Xmx parameters when starting JVMs?
为什么Java程序允许您指定-xms和-xmx?作为开发人员,为什么我需要知道/担心我的程序将预先使用多少cpu / mem?
还是不同角度的相同问题,为什么不让Python指定这些类型的选项? (在Python中工作了5年,而且从未这样做)
这与Python是解释语言而Java是某种JVM到机器语言的字节码吗?
还是与垃圾回收方式有所不同有关,Java需要更加警惕内存消耗?
答案 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)
只是一个想法!