当前位置: 首页 > 面试题库 >

尽管(Max)MetaspaceSize,Java 8仍为元空间保留最小1G

曹君墨
2023-03-14
问题内容

Java
8在启动后立即为Metaspace保留1G。这意味着最小的元空间大小为1G。但是我将MetaspaceSize设置为300m,将MaxMetaspaceSize设置为400m。为什么Java保留的资源超出我的允许?

Java版本

$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

VM标志

$ jcmd 21689 VM.flags
21689:
-XX:CICompilerCount=3 -XX:ConcGCThreads=1 -XX:G1HeapRegionSize=1048576 -XX:InitialHeapSize=62914560 -XX:+ManagementServer -XX:MarkStackSize=4194304 -XX:MaxHeapSize=1006632960 -XX:MaxMetaspaceSize=399998976 -XX:MaxNewSize=603979776 -XX:MetaspaceSize=299999232 -XX:MinHeapDeltaBytes=1048576 -XX:NativeMemoryTracking=summary -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC

NMT

[jetty9-proxy@bm01 bin]$ jcmd 21689 VM.native_memory
21689:

Native Memory Tracking:

Total: reserved=2769543KB, committed=1311159KB

-                     Class (reserved=1221904KB, committed=197904KB)
                            (classes #36543)
                            (malloc=3344KB #44041) 
                            (mmap: reserved=1218560KB, committed=194560KB)

刚开始之后

Total: reserved=2402748KB, committed=150796KB

-                     Class (reserved=1056956KB, committed=7868KB)
                            (classes #1300)
                            (malloc=188KB #564) 
                            (mmap: reserved=1056768KB, committed=7680KB)

问题答案:

Java为类保留1G的原因在于它如何管理压缩的类指针。

长答案 :请阅读此文档
https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/considerations.html

简短的答案 :在’CompressedClassSpaceSize’属性-XX中设置正确的大小:CompressedClassSpaceSize
= 300m



 类似资料:
  • 我们将设置为 1 小时,如下所示(以前设置为 72H) 使用以下Kafka命令行工具,我们将kafka 设置为< code>1H。我们的目标是清除topic - 中比1H旧的数据,因此我们使用了以下命令: 此外 两个命令都运行无误。 但问题是关于Kafka的数据,它比1H更老,仍然存在! 实际上,没有从主题分区中删除任何数据。我们有HDP Kafka集群版本1.0x和ambari 我们不明白为什么

  • 我注意到Docker似乎在使用大量磁盘空间。我可以看到目录。docker/machine/machines/default是27.4GB 我最近清理了我没有使用的所有图像和容器。现在,当我运行时,我看到没有图像正在运行。 我还可以看到我有2个容器可用。 然后我可以看到我有3个图像。 它们怎么会占用近30GB的空间?

  • 有没有办法让HTML净化器保留在呈现的HTML中通常会看到的隐式空间? 例如,在以下情况下,您通常希望和之间有一个空格: 例1 例2

  • 问题 在迭代操作或者其他操作的时候,怎样只保留最后有限几个元素的历史记录? 解决方案 保留有限历史记录正是 collections.deque 大显身手的时候。比如,下面的代码在多行上面做简单的文本匹配, 并返回匹配所在行的最后N行: from collections import deque def search(lines, pattern, history=5): previous_

  • 用户应该能够将活动登录到activity_log模型中,但CreateView表单必须自动填写当前登录用户的user_id。 我已将OnetoOne关系上的djangoauth_user表扩展到另一个名为Profile(users-profile)的模型中。user_id是自动添加到我的Profile模型中的ForeignKey字段(我可以在MySQL WorkBench中看到它),并且是auth

  • 有很多关于堆大小的帖子和站点,但是没有一个提到在调用JVM时如何找出我可以保留的最大可能堆大小。 任务是用最大可用堆大小xmx=max动态启动我的jvm(这里不需要讨论这个任务的对象!)。 我们可以考虑读取当前可用或空闲的内存,并将该大小用于xms和XMX。但这不起作用。 调用Java程序时: Java-XMS1536M-XMX1536M myApp 导致: 选择您选中的应用程序大约需要的堆。并在