迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

永久代堆空间和元空间

作者:迹忆客 最近更新:2023/08/10 浏览次数:

这个 JVM 内存空间的简短演示探讨了 Java 虚拟机如何处理用户数据内存分配。 虽然我们不会用图表来介绍这个主题,但它是相当基础的,我们相信我们的解释足以让您清楚。

此外,我们还将比较 PermGen 和 Metaspace 以及两者。 这篇简短的文章为您提供了大量信息。


Java中的永久生成堆空间

PermGen 是 Java 虚拟机使用的永久生成堆空间的缩写形式。 它是占据所有类、方法、对象、内化字符串等的空间。

对于大多数应用程序来说,永久生成对垃圾收集器的效率没有明显的影响。 然而,某些应用程序会动态创建和加载许多类,例如 JSP。

如果出现这种情况,我们可以使用命令行来增加 MAX: PermGen 的大小。 增加 MAX: PermGen Size 的命令:-XX:MaxPermSize=SIZE, -XX:PermSize=[size]

但这里需要记住一件事。 由于 Java 在 Java 开发工具包版本 8 版本中删除了此内存空间,因此如果我们在 Java 8 或更高版本中使用这些调整标志,我们将收到这些警告。

>> java -XX:PermSize=100m -XX:MaxPermSize=200m -version
OpenJDK 64-Bit Server VM warning: Ignoring option PermSize; support was removed in 8.0
OpenJDK 64-Bit Server VM warning: Ignoring option MaxPermSize; support was removed in 8.0

Java 中 PermGen 的主要特征

PG也包含在完整的垃圾回收中:

  1. JVM 类元数据的空间。
  2. Hotspot 中 Java 类的内部表示。
  3. 有关类结构、字段和标识符的信息。
  4. 有关方法编译和字节码的信息。
  5. 变量
  6. 始终在线的池和符号解析。

PermGen 的常见问题:

  1. MaxPermSize 的内存有限。
  2. 较大的 MaxPermSize 会导致重新启动。
  3. 内存不足错误问题。
  4. 由于应用程序引用而触发了类卸载。
  5. MaxPermSize(仅限 64 MB 至 85 MB)。

Java 中的永久代 (PermGen) 与元空间 (Metaspace)

从 Java 8 开始,我们看到 PermGen 被 Metaspace 取代。 这一变化也普遍存在细微的差异。

例如,Metaspace 具有无限的默认最大大小,而前者则没有。 如果我们阅读官方文档,我们会了解到 PermGen 在 32 位 JVM 上的默认最大大小为 64 MB。

同样,它在 Java 7 及更早版本中的 64 位 JVM 上有 82 MB。 但现在您知道内存不足错误不再是问题了。

难道我们不应该探索元空间吗? 显然,是的。


元空间(Java 8)

请将其视为一个容器,Java VM 保存您的内存(例如类、方法、变量、字符串等)的地方,因为我们已经指出了旧内存空间与此内存空间之间最重要的区别。

那么事不宜迟,让我们来看看Metaspace有什么不同?

下表对 Metaspace 和 PermGen 进行了比较和对比。

序号 永久代 元空间
1 PermGen Space 在 Java 8 中被淘汰。 新的空间元空间取代了它,它随 Java 8 一起发布。
2 正如其名称所示,它始终具有恒定的内存大小。 根据操作系统动态分配内存。
3 无效的垃圾收集器 (GC)。 有效气相色谱

总结

尽管这是一篇简短而切中要点的文章,但我们还是对永久代和元空间内存空间、垃圾收集器的角色以及 JVM 如何构建所有这些空间进行了简短的描述。

除此之外,我们还通过实时示例来区分每一个,并引用了有用的参考资料。 简而言之,永久代仍然存在于 JDK 7 及更早版本中。

另一方面,元空间为我们的应用程序提供了更可靠、更灵活的内存空间。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Java 日期中获取当前时间戳

发布时间:2023/08/11 浏览次数:177 分类:Java

这篇文章是关于获取 Java Date 中的当前时间戳的。本文介绍如何获取 Java 中的当前时间戳,并列出一些示例代码以了解该主题。

获取 Java 中的当前年份

发布时间:2023/08/11 浏览次数:145 分类:Java

在本文中,讨论了如何在 Java 中获取当前年份的不同方法。在 Java 中使用 java.Util.Date 类获取当前年份

如何在 Java 中为日期增加一天

发布时间:2023/08/11 浏览次数:156 分类:Java

在本文中,我们将学习如何在 Java 中将日期增加一天。这可以通过使用各种方法来完成,例如 plusDays 方法,Calendar 类方法,向 Date 对象添加毫秒以及 Instant class 方法。如果你使用的是 Java 1.8 或

如何在 Java 中比较两个日期

发布时间:2023/08/11 浏览次数:190 分类:Java

在本文中,我们将学习多种方法来比较 Java 中的日期。为了获得理想的结果,我们可以用以下的方法,即 before(),after(),equals() 和 compareTo()。

如何在 Java 中从数组创建数组列表

发布时间:2023/08/11 浏览次数:134 分类:Java

本文将介绍在 Java 中从数组创建数组列表的不同方法。在 Java 中,有三种不同的方法可以将数组转换为数组列表,如 Arrays.asList()、Collections.addAll() 和 add()。

如何在 Java 中打印 ArrayList

发布时间:2023/08/11 浏览次数:154 分类:Java

在本文中,我们将介绍在 Java 中打印 ArrayList 的多种方法。我们的 Arraylist 将包含一个名为 ModelClass 的类对象,它有一个变量 name 和 getter/setter 函数。

如何在 Java 中创建二维 ArrayList

发布时间:2023/08/11 浏览次数:94 分类:Java

在本文中,我们将介绍两个关于如何创建二维 ArrayList 的 Java 方法。在 Java 中使用固定大小的 ArrayList 创建二维 ArrayList

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便