永久代堆空间和元空间
这个 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也包含在完整的垃圾回收中:
- JVM 类元数据的空间。
- Hotspot 中 Java 类的内部表示。
- 有关类结构、字段和标识符的信息。
- 有关方法编译和字节码的信息。
- 变量
- 始终在线的池和符号解析。
PermGen 的常见问题:
- MaxPermSize 的内存有限。
- 较大的 MaxPermSize 会导致重新启动。
- 内存不足错误问题。
- 由于应用程序引用而触发了类卸载。
- 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 及更早版本中。
另一方面,元空间为我们的应用程序提供了更可靠、更灵活的内存空间。
相关文章
如何在 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 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,