迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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/12/17 浏览次数:217 分类:Java

本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

如何在 Java 中把 Hashmap 转换为 JSON 对象

发布时间:2023/12/17 浏览次数:187 分类:Java

它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。

如何在 Java 中按值排序 Map

发布时间:2023/12/17 浏览次数:171 分类:Java

本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

如何在 Java 中打印 HashMap

发布时间:2023/12/17 浏览次数:192 分类:Java

本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。

在 Java 中更新 Hashmap 的值

发布时间:2023/12/17 浏览次数:146 分类:Java

本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。

Java 中的 hashmap 和 map 之间的区别

发布时间:2023/12/17 浏览次数:79 分类:Java

本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,

在 Java 中获取用户主目录

发布时间:2023/12/17 浏览次数:218 分类:Java

这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。

Java 中 size 和 length 的区别

发布时间:2023/12/17 浏览次数:179 分类:Java

这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。

Java 中的互斥锁

发布时间:2023/12/17 浏览次数:111 分类:Java

了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便