java - 我真的需要定义 Java 最小堆大小吗

标签 java jvm heap-memory

我要将应用程序部署到实时服务器,现在我必须为 jvm 设置堆和永久生成大小。我看过很多文章,他们都说“将最小堆大小设置为(某个数字)”,以及“将最大堆大小设置为(某个数字)”,但是这些文章都没有真正说明为什么需要设置最小堆大小。我理解设置最大堆大小的原因,但不了解最小值。如果您对此有所了解,我将不胜感激。

最佳答案

Java中的堆就是一般的内存分配区。假设我们将最小堆大小设置为 1000 字节(这是一个低得离谱的数字)。现在假设我在我的程序中实例化了一个对象,其中包含一些 2000 个字符长的文本。如果不先扩展我的堆大小,我就无法保存这个对象。现在,大概我的最大堆参数足够大以允许这样做 - 但这是设置最大堆大小的原因。

但是,假设我的服务器有 4G 内存,并且我将最小堆大小设置为此。 (一个大得离谱的数字。)如果没有其他程序占用任何内存,这将起作用。但是,如果我用我的 java 程序启动第二个进程,它将无法分配足够的内存并退出。

最小尺寸为您做了两件事;首先,它使内存快速可用以允许快速启动。其次,它可以让你调整你的 jvm,使你有一些不变量,允许你预测你可以运行多少进程。如果您的最小堆大小太大,您可能会在一个从不需要那么多的进程上浪费内存,从而限制系统的容量。如果设置得太小,程序将需要很长时间才能启动,从而对进程的性能产生不利影响。

关于java - 我真的需要定义 Java 最小堆大小吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10605133/

相关文章:

java - JVM会把编译后的字节码变成可执行文件吗

java - 如何设置 Storm worker 的 JVM 最大堆大小?

java - Java 进程的 'pathname' 的空 '/proc/smap' 条目是什么?

java - 打开太多图形时如何避免 MATLAB 崩溃?

java - 子类是否比父类(super class)占用更多内存

Java - JFrame 根本不显示其内容

java - 当我在另一个 java 中找到一个字符串

java - Firestore 分页适配器 - 如何知道查询是否返回 0 个结果

java - 如何从 ImageIO 中排除特定的 TIFF 阅读器?

Java:填充内存中排序的批处理