我有两个问题。其中一个会把话题弄得乱七八糟:)
1)我遇到了一个问题,即无法找到关于不同垃圾收集器在Hotspot中如何工作的完整信息。但我不是在谈论垃圾收集器工作的一般描述(我们在互联网上有很多这样的信息),我是在谈论具体的算法。我找到了这本白皮书(Java HotSpot虚拟机中的内存管理)http://www.oracle.com/technetwork/Java/javase/tech/memorymanagement-whitepaper-1-150020.pdf。但它只有大致的想法。它对并行压缩算法(我指的是并行标记-扫描-压缩)有很好的描述(可能不是很好--见我的第二个问题),但它没有解释其他垃圾收集器的算法。然而,这份白皮书是我能在互联网上找到的最好的信息。我想知道的是,从哪里获得关于不同垃圾收集器如何工作的完整描述/信息(对于年轻一代,我的意思是:ParNew、DefNew、psyounggen;对于老一代:PSOLdGen、ParOldGen、Concurrent-Mark-Sweep)。不敢相信这些信息对用户来说是不可用的。
下面列出了我不能理解的事情:
那么,这是否意味着,当我们有一个区域包含98-99%的活物体和2-1%的死物体(换句话说,死物体的很小百分比)时,压缩这个区域不值得从这样一个区域中恢复的空间。然而,这些微小的空闲空间(空穴)最终会被填满,在垃圾收集完成后就不会有空穴了。
>
所以总结阶段做的第一件事是检查区域的密度,从最左边的区域开始,直到它达到一个点,即可以从一个区域和它右边的区域恢复的空间值得压缩这些区域的成本。
嗯,如果我们有很大比例的死物体,比这个区域更值得压缩,对吗?
>
该点右侧的区域将被压缩,消除所有死区。
请澄清它们将如何压实。每个区域都将单独压实?我想没有。所以也许这里会有某种转变?
>
摘要阶段为每个压缩区域计算并存储活动数据的第一个字节的新位置。
这只是对一个算法的一般描述。这种描述可以有不同的细节。在本例中,它给出了大部分细节,但仍为实现者留下一些选择。
关于你的问题:
所以“摘要阶段”没有发生压缩?上一阶段的目的仅仅是查找所有可用空间吗?
-是的,这是正确的。摘要阶段收集索引数据,并基本上确定所有必要的内容,以便压缩阶段可以执行复制。它们没有说明如何实现压缩,但默认的方法是简单地将每个活动对象放在前一个对象旁边。基本上,所有空的空间都被移除,在压缩步骤完成后,您就有了一个连续的内存块,其中包含所有活动对象。我明白你对第四部分的困惑,但请注意,它是用将来时写的:“will be compact”--所以不是在摘要时,而是在以后。是[...]的意思吗压缩此区域不值得从这样一个区域中恢复的空间?
是的,没错。您基本上会损失一些空间,但用内存来换取执行速度是非常常见的。确切的密度阈值取决于实现,但我将使用内存占总内存的比率阈值估计在70-90%左右。主要内容:UnionFind3.java 文件代码:并查集里的 find 函数里可以进行路径压缩,是为了更快速的查找一个点的根节点。对于一个集合树来说,它的根节点下面可以依附着许多的节点,因此,我们可以尝试在 find 的过程中,从底向上,如果此时访问的节点不是根节点的话,那么我们可以把这个节点尽量的往上挪一挪,减少数的层数,这个过程就叫做路径压缩。 如下图中,find(4) 的过程就可以路径压缩,让数的层数更少。 节点 4 往上寻找根节点时,压缩
有一种“带路径压缩的加权快速联合”算法。 代码: 问题: > 路径压缩是如何工作的意味着我们只到达节点的第二个祖先,而不是根。 包含从 到 整数。如何帮助我们知道集合中元素的数量? 有人能帮我澄清一下吗?
我希望使用log4j2 RollingFileAppender和定制的压缩算法(ZStd)。 目前为止支持的压缩算法似乎是FileExtension枚举(zip,gz,bz2,...)中的压缩算法,请参见https://github.com/apache/logging-log4j2/blob/efa64bfad3f67c5b5fed6b25d65ef5ca2212011b/log4j-core/
我试图找到一种压缩算法,我可以使用它来编码一个blob,只使用16个固定长度的符号(0b0000-0b1111)。 在没有任何压缩的情况下,我可以使用这16个符号对其各自的位值进行编码(例如,符号5(0b0101)对位0101进行编码,因此如果我的blob是100位长,我需要25个符号来表示它-但这样做不会提供压缩。 我认为我需要的是一个反向霍夫曼(在某种意义上,代码是固定长度的,但它代表可变长度
DEFLATE 是同时使用了哈夫曼编码(Huffman Coding)与 LZ77 算法的一个无损数据压缩算法,是一种压缩数据流的算法。任何需要流式压缩的地方都可以用。目前 zip 压缩文件默认使用的就是该算法。 关于算法的原理,以及 哈夫曼编码(Huffman Coding)与 LZ77 算法,感兴趣的读者可以查询相关资料,这里推荐 GZIP压缩原理分析——第五章 Deflate算法详解 序列文
我们将有一个高负荷的遥测服务。我正在寻找能够扩展收集器和后端(zipkin)的解决方案 有一种扩展zipkin的解决方案。看起来很简单-只需使用内部平衡 但是,我找不到使用多个openTelemetry收集器的示例。运行几个收集器实例没有什么问题,但我如何说“myApp”来平衡它们呢?在Exporters中没有这样的选项。