问题标签 [metaspace]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1467 浏览

java - MaxPermSize 与 MaxMetaspaceSize

我正在阅读 PermGen 和 Metaspace 之间的区别,前者的缺点之一是启动时有固定的大小。如果你有两个参数来调整它,我不明白为什么它是固定的:

在我看来,我们可以对 Metaspace 说同样的话,它也在启动时由 MaxMetspaceSize 固定(我知道默认情况下它是无限制的,但保留它似乎不是一个好习惯)。

我是不是误会了什么?MaxPermSize 和 MaxMetaspaceSize 有什么区别?

0 投票
1 回答
335 浏览

java - 为什么类不能被 URLClassLoader 加载?

我想模拟元空间OOM。我打算ClassA通过不同的 URLClassLoader 加载类,这里是代码:

但是,奇怪的是,加载的类数在达到 jvisualvm 中显示的 1437 时停止增加,并且使用的元空间大小很低,即使 for 循环已经运行了数百万次。似乎每个新的 URLClassLoader 实例都没有加载 ClassA。为什么?

0 投票
2 回答
1745 浏览

java - 为什么 MetaSpace Size 是 Used MetaSpace 的两倍?

我写了一个程序来模拟 MetaSpace OOM。但我发现它MetaSpace Size几乎总是Used MetaSpace. 为什么?

我用 flag 运行我的程序,程序在达到大约 25M 而不是 50M-XX:MaxMetaspaceSize=50m时抛出 OOM ,为什么?Used MetaSpace

在此处输入图像描述

0 投票
1 回答
2878 浏览

java-8 - 内存不足:Java 8 的元空间

我的产品有 256 MB 的 RAM。我已经将java 6升级到java 8。然后我开始面临与java 8相关的内存问题。随着Java 8的使用内存消耗在增加使用相同的代码,java 6的内存消耗是稳定的 我已经探索了很多关于元空间,java8并在元空间参数下方找到。

我尝试了以下组合并出现内存不足错误

1.MaxMetaspaceSize 50M MaxMetaspaceFreeRatio 60M MinMetaspaceFreeRatio 50M

2.MaxMetaspaceSize 30M

3.MaxMetaspaceSize 40M

4.MaxMetaspaceSize 50M

5.MaxMetaspaceSize 80M

但 2 到 3 小时后,出现内存不足元空间错误。

有人能解释一下元空间选项 MaxMetaspaceSize,MaxMetaspaceFreeRatio ,MinMetaspaceFreeRatio 是什么吗?

我如何确定合适的尺寸是多少?这些值的正确组合是什么,以避免生产中的内存不足实例并减少内存消耗?

0 投票
1 回答
4485 浏览

java - 如何使用 java 1.8 强制清理元空间

我最近将 java 版本从 1.6 升级到 1.8。迁移到 java 1.8 后,元空间内存消耗随着时间的推移而增加(通过 JConsole 观察到这一点)。此外,每次访问网页时,元空间大小都会增加。所以,

有什么办法可以强制清理 Metaspace?

有什么方法可以检查元空间中的所有内容并增加元空间的大小?

哪种 GC(SerialGC、G1、ConcMarkSweep)有效地清理了元空间以及我应该为 GC 使用哪些 JVM VM 配置?

正确的元空间操作所需的最小 RAM java 1.8 是多少?在我的例子中,它限制在 256M RAM,在一个微型 Linux 机器上具有相同的交换大小。

如果我们使用 XX:MaxMetaSpaceSize 限制元空间大小,JVM 会引发 outofmemory:metaspace 条件。

0 投票
1 回答
674 浏览

java - 在 Java 8 中,是否可以使用 JVM 参数来控制何时(或在什么条件下)卸载类?

在我的 JMeter 测试中,我发现 JMeter 不断加载类 javascript_gen_cmd__xxx 并且它使测试无法达到我设置的吞吐量。

从 JConsole 加载类 当我单击 JVisualVM 中的“执行 GC”按钮时,类被卸载并达到吞吐量。

所以我认为如果我能指出 GC 应该在什么时候发生会有所帮助,例如当加载的类的总数达到一定数量时。

我试过 -XX:MetaspaceSize=120M 但是当元空间使用量达到 120MB 时它没有触发类卸载。

0 投票
2 回答
166 浏览

clojure - Clojure eval 导致垃圾收集器挂起

我在运行使用 eval 的遗传编程算法时遇到了这个问题。

为了说明问题,我将其缩小到以下代码片段:

当我运行代码时,垃圾收集器会从元空间卸载所有创建的 $eval_n 类,但在第二次垃圾收集器调用时它会挂起。

我将 jdk1.8.0_102 与以下 JVM 选项一起使用:-XX:MetaspaceSize=200m -XX:MaxMetaspaceSize=200m

过了一会儿,我收到以下错误:

编辑: 我添加了一个visualVM的屏幕截图来显示行为,当JVM挂起时,图表不再更新,它继续使用完整的CPU核心。

在此处输入图像描述

我也尝试使用 java 7(没有任何 JMV 选项),我遇到了与 PermGen 相同的问题。

任何想法如何避免这个问题?

编辑:

仅当我从 leinigen-REPL 使用 eclipse-逆时针运行它时才会出现问题。如果我从基本命令行 REPL 运行代码,则不会出现问题!

0 投票
1 回答
6631 浏览

java - Java中元空间和本机内存的区别

元空间和本机内存有什么区别?

可以使用 jconsole、jvisualvm、jstat cmds 跟踪元空间。
似乎可以使用 jcmd 跟踪本机内存。关联

元空间也是本机内存吗?

NIO 缓冲区存储在哪里?在元空间或本机内存中?

0 投票
2 回答
1633 浏览

java - 元空间是否从本机内存中分配?

在 Java 8 中,元空间是从本机内存中分配的,但我没有在网上找到任何地方什么是本机内存?根据此链接,它是操作系统可用的内存,但在 Java 中 Metaspace 和 Native Memory 之间的差异中,本机内存也显示为分配给 JVM 进程的内存的一部分

示例:- 如果是,请考虑我在 Windows 操作系统上有 15 GB 内存的情况。我只有一个进程(Java 进程)在-Xmx 4GB.

这是否意味着操作系统最多可以使用(15-4)=11 GB将分配的元空间内存?

0 投票
1 回答
9024 浏览

java - 理解 JVM 堆打印输出中的元空间行

在 Java 8 堆打印输出中,您可能会看到如下所示的一行:

元空间已用2425K ,容量4498K,已提交4864K,保留1056768K

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/considerations.html试图解释这一行:

在以 Metaspace 开头的行中,使用的值是用于加载的类的空间量。容量值是当前分配的块中可用于元数据的空间。提交的值是可用于块的空间量。保留值是为元数据保留(但不一定提交)的空间量。

同样,从上面的链接:

从操作系统请求空间,然后分成块。类加载器从其块中为元数据分配空间(块绑定到特定的类加载器)。

我想知道每个字段的含义(已使用、容量、已提交、保留),但我很难理解上述定义。

我的理解是元空间是从 JVM 进程的虚拟地址空间中分割出​​来的。JVM 在启动时根据 -XX:MetaspaceSize 保留初始大小,该大小具有未记录的特定于平台的默认值。我假设reserved是指元空间的总大小。空间被分成块。我不确定每个块是否具有相同的大小。每个块包含与单个类加载器关联的类元数据。

容量承诺对我来说听起来像是可用空间(基于链接中的定义)。由于元数据存储在块中,所以我假设已用 + 容量将等于已提交,但事实并非如此。也许已提交意味着已使用的保留空间,但是使用的意思是什么?元数据使用的空间?那么,还有什么其他方式可以利用空间呢?

我希望你能看到我的困惑。我希望澄清定义。