我将要把一个应用程序部署到一个活动服务器上,现在我必须为JVM设置堆和permgen大小。(某个数字)",并将设置为“将最大堆大小设置为(某个数字)",但是这些文章都没有真正说明为什么需要设置最小堆大小。我理解设置最大堆大小的原因,但不是关于最低限度的。如果你能在这方面提供一些线索,我将感激不尽。
btqmn9zl1#
Java 中 的 堆 是 通用 的 内存 分配 区 。( 这 是 一 个 低 得 离谱 的 数字 ) 。 现在 假设 我 在 程序 中 示例 化 了 一 个 对象 , 其中 包含 了 一些 长度 为 2000 个 字符 的 文本 。 如果 不 首先 扩展 堆 大小 , 我 就 无法 保存 该 对象 。 现在 ,大概 我 的 maximum heap 参数 足够 大 以 允许 这样 做 - - 但 这 正是 设置 最 大 堆 大小 的 原因 。然而 , 假设 我 的 服务 器 有 4G 的 内存 , 并且 我 将 最 小 堆 大小 设置 为 这个 值 ( 一 个 大 得 离谱 的 数字 ) 。 如果 没有 其他 程序 占用 任何 内存 , 这 将 是 可行 的 。 但是 , 如果 我 用 我 的 java 程序 启动 第 二 个 进程 , 它 将 无法 分配 足够 的 内存 并 退出 。最 小 大小 为 您 做 两 件 事 ;首先 , 它 可以 使 内存 快速 可用 , 以 允许 快速 启动 。 其次 , 它 可以 让 你 调整 你 的 jvm , 这样 你 就 有 了 一些 不 变量 , 允许 你 预测 你 可以 运行 多少 进程 。 如果 你 的 最 小 堆 大小 太 大 , 你 可能 会 浪费 内存 在 一 个 从来 不 需要 那么 多 内存 的 进程 上 , 从而 限制 了 你 的 系统 容量 。 如果 你 把 它 设置 得 太 小 ,程序 将 需要 很 长 时间 才能 启动 , 从而 对 进程 的 性能 产生 负面 影响 。
23c0lvtd2#
通过设置最小堆大小,Java可以预先分配一些内存,从而缩短启动时间。
70gysomp3#
显式设置最小大小(高于默认值)有助于在操作系统级别进行分配碎片处理,并有助于提高启动时性能。Java堆由操作系统分配的内存支持,初始块越大,发生的重新分配和碎片越少。将最小值设置为等于或几乎等于最大值将完全消除这些情况。
3条答案
按热度按时间btqmn9zl1#
Java 中 的 堆 是 通用 的 内存 分配 区 。( 这 是 一 个 低 得 离谱 的 数字 ) 。 现在 假设 我 在 程序 中 示例 化 了 一 个 对象 , 其中 包含 了 一些 长度 为 2000 个 字符 的 文本 。 如果 不 首先 扩展 堆 大小 , 我 就 无法 保存 该 对象 。 现在 ,大概 我 的 maximum heap 参数 足够 大 以 允许 这样 做 - - 但 这 正是 设置 最 大 堆 大小 的 原因 。
然而 , 假设 我 的 服务 器 有 4G 的 内存 , 并且 我 将 最 小 堆 大小 设置 为 这个 值 ( 一 个 大 得 离谱 的 数字 ) 。 如果 没有 其他 程序 占用 任何 内存 , 这 将 是 可行 的 。 但是 , 如果 我 用 我 的 java 程序 启动 第 二 个 进程 , 它 将 无法 分配 足够 的 内存 并 退出 。
最 小 大小 为 您 做 两 件 事 ;首先 , 它 可以 使 内存 快速 可用 , 以 允许 快速 启动 。 其次 , 它 可以 让 你 调整 你 的 jvm , 这样 你 就 有 了 一些 不 变量 , 允许 你 预测 你 可以 运行 多少 进程 。 如果 你 的 最 小 堆 大小 太 大 , 你 可能 会 浪费 内存 在 一 个 从来 不 需要 那么 多 内存 的 进程 上 , 从而 限制 了 你 的 系统 容量 。 如果 你 把 它 设置 得 太 小 ,程序 将 需要 很 长 时间 才能 启动 , 从而 对 进程 的 性能 产生 负面 影响 。
23c0lvtd2#
通过设置最小堆大小,Java可以预先分配一些内存,从而缩短启动时间。
70gysomp3#
显式设置最小大小(高于默认值)有助于在操作系统级别进行分配碎片处理,并有助于提高启动时性能。
Java堆由操作系统分配的内存支持,初始块越大,发生的重新分配和碎片越少。
将最小值设置为等于或几乎等于最大值将完全消除这些情况。