在Java8中,我在我的服务上运行GC日志,并且通过GCeasy我看到为元空间分配了1GB,而峰值大约是40M,那么为什么要分配1GB呢?
我玩了这些标志,并添加了“-xx:maxMetasPaceSize=10m”。
然后,我得到了java.lang.OutOfMemoryError:Metaspace,正如预期的那样,但我仍然在GC日志中看到分配了1 GB。日志里有窃听器吗?或者我错过了什么。
我在GC日志html" target="_blank">文件上运行grep Metaspace,得到以下输出:
2020-05-19T16:38:18.359+0000:0.837:[完全GC(元数据GC阈值)][Psyounggen:7298K->0K(153088K)][Paroldgen:8K->6944K(349696K)]7306K->6944K(502784K),[MetaSpace:9975K->9975K(1058816K)],0.0249384秒][times:user=0.08sys=0.01,real=0.02秒]
2020-05-19T16:38:18.386+0000:0.864:[完全GC(元数据GC阈值)][Psyounggen:0K->0K(153088K)][ParoldGen:6944K->6944K(349696K)]6944K->6944K(502784K),[MetaSpace:9975K->9975K(1058816K)],0.0129850秒][times:user=0.04sys=0.00,real=0.01秒]
2020-05-19T16:38:18.400+0000:0.879:[完整GC(最后一个沟收集)][Psyounggen:0K->0K(153088K)][ParoldGen:6944K->6816K(349696K)]6944K->6816K(502784K),[MetaSpace:9975K->9965K(1058816K)],0.0252318秒][times:user=0.07sys=0.00,real=0.03秒]
答案基本上就在这里,尽管理解起来并不是微不足道的。
这就是为什么您会在GC日志
中看到这些大数字。
我一直在分析我们服务的Java.lang.OutofMemoryError:Java堆空间,并试图通过Eclipse MAT工具挖掘堆转储。 我们的服务使用8G堆运行,生成的堆转储的大小只有500 MB。
我试图寻找这个问题的答案,但始终没有找到答案。 当我定义最大堆大小时,为Java GC空间分配大小的标准比率是多少? 也就是说:如果我用4Gb的堆启动JVM,那么分配给Eden的是多少?给幸存者多少钱?终身监禁要多少钱? 此外,对于不同的VM供应商,该比率是否会发生变化? 提前谢谢
我有一个简单的需求,不确定配置solr是否容易做到这一点。 假设所有文档只有一个文本字段,没有标记化。 当查询进来时,我希望结果按匹配文本的百分比排序(包含)。百分比由计算 例如,有三个文档,文本字段如下: doc1:abcdefghij doc2:abcdefgh 3:abc 如果搜索词为“cde”,则文档1和文档2匹配(文本字段包含搜索词)。对于文件1,匹配百分比=3/10=30% 对于文件2
问题内容: 直到Java 7为止,JVM内存中都有一个称为 PermGen 的区域,JVM用来保留其类。在Java 8中 ,已将其删除并替换为名为 Metaspace 的区域。 什么是 最重要的区别 PermGen的和元空间之间? 我知道的唯一区别是,不再可以抛出该异常,并且忽略了VM参数。 问题答案: 从用户角度来看,主要的区别(我认为先前的答案不够强调)是, 默认情况下 , Metaspace
我正在使用mongoose来计算匹配某个查询的文档数量。此查询的索引为: Mongo版本为3.2,收藏文档数量约为175万。 需要2分多钟。但如果我这么做了: 然后大约需要2.5秒。 我做错什么了吗?我能做些什么来加快速度吗? 编辑:解释日志。 计数: 为了找到。
问题内容: 什么啊 和之间是什么关系? 问题答案: 元空间 是用于存储类元数据的内存区域,元类是在解析文件时创建的内部JVM结构。 类元数据包括: Java类的内部表示 具有字节码的方法 字段描述符 恒定池 符号 注解 等等 默认情况下是无限的。 当option为ON(堆<32G的默认设置)时,类将从Metaspace移到称为 Compressed Class Space 的单独区域。这是为了使用