- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这篇文章很可能是 OpenHFT 常见问题的一个很好的候选者。
我正在玩 ChronicleMap,考虑将其作为一个想法,但有很多问题。我相信大多数研究该产品的初级程序员都有类似的考虑。
您能解释一下这个 API 中是如何管理内存的吗?
ChronicleMap 宣称有一些显着的 TB 堆外内存资源可用于处理其数据,我想对此有一个清晰的认识。
让我们开始使用 500GB HD 和 4GB RAM 笔记本电脑的程序员。在这种情况下,纯数学表示 - 可用“交换”内存的总资源为 504GB。让我们给操作系统和其他程序减半,剩下 250GB HD 和 2GB RAM。您能否详细说明 ChronicleMap 可以相对于可用资源分配的实际可用内存数量?
接下来的相关问题是关于ChronicleMap的实现。
我的理解是,每个 ChronicleMap 都会分配它使用的内存块,当我们能够准确预测通过的数据量时,就会实现最佳性能/内存使用。然而,这是一个动态的世界。
让我们举一个(夸张但可能的)例子:
假设 K 个(关键)“城市”及其 V(值)-“描述”(城市)的 map ,并允许用户对描述长度有很大限制。
第一个用户输入:K = "Amsterdam"
,V = "City of bicycles"
并且此条目用于声明 map - 它为这样的对设置了先例:
ChronicleMap<Integer, PostalCodeRange> cityPostalCodes = ChronicleMap
.of(CharSequence.class, CharSequence.class)
.averageKey("Amsterdam")
.averageValue("City of bicycles")
.entries(5_000)
.createOrRecoverPersistedTo(citiesAndDescriptions);
现在,下一个用户得意忘形地写了一篇关于布拉格的分析他传递给:K = "Prague"
,V = "City of 100 towers is located in the hard of Europe...blah,blah...million words..."
现在程序员预计最多有 5_000 个条目,但他失控了,有数千个条目。
ChronicleMap 会为这种情况自动分配内存吗?如果是,是否有一些更好的方法来为此动态解决方案声明 ChronicleMaps?如果不是,您会推荐一种方法(最佳代码示例)来最好地处理此类情况吗?
这如何与文件的持久性一起工作?
ChronicleMaps 会耗尽我的 RAM 和/或磁盘空间吗?避免这种情况的最佳做法?
换句话说,请解释在低估和高估值(和/或键)长度和条目数的情况下如何管理内存。
哪些适用于 ChronicleMap?
.entries(1_000_000)
, .averageValueSize(1_000_000)
并且实际使用情况是 - Entries = 100,Average Value Size = 100。 会发生什么?:
1.1。 - 一切正常,但会有大量浪费的 block - 未使用?
1.2。 - 一切正常,未使用的内存可用于:
1.2.1 - ChronicleMap
1.2.2 - 使用 ChronicleMap 的给定线程
1.2.3 - 给定过程
1.2.4 - 给定 JVM
1.2.5 - 操作系统
1.3。 - 请解释未使用的内存是否发生了其他问题
1.4。 - 过大的声明对我的持久性文件有什么影响?
.entries(10)
、.averageValueSize(10)
,实际使用量为 1_000_000s 个条目,以及平均值大小 = 1_000 字节。 会发生什么?:最佳答案
Lets get down to a programmer with a laptop of 500GB HD and 4GB RAM. In this case pure math sais - total resource of 'swapped' memory available is 504GB. Let's give the OS and other programs half and we are left with 250GB HD and 2GB RAM. Can you elaborate on the actual available memory ChronicleMap can allocate in numbers relative to available resources?
在这种情况下,Chronicle Map 会非常慢,每次使用 Chronicle Map 操作平均有 2 次随机磁盘读写(总共 4 次随机磁盘操作)。传统的基于磁盘的数据库引擎,如 RocksDB或 LevelDB ,当数据库大小远大于内存时,应该会工作得更好。
Now the programmer had expected max 5_000 entries, but it gets out of his hands and there are many thousands of entries.
Does ChronicleMap allocate memory automatically for such cases? If yes is there some better approach of declaring ChronicleMaps for this dynamic solution? If no, would you recommend an approach (best in code example) how to best handle such scenarios?
Chronicle Map 将分配内存,直到实际插入的条目数除以通过ChronicleMapBuilder.entries()
配置的数量不高于配置的ChronicleMapBuilder.maxBloatFactor()
。 .例如如果您将 map 创建为
ChronicleMap<Integer, PostalCodeRange> cityPostalCodes = ChronicleMap
.of(CharSequence.class, CharSequence.class)
.averageKey("Amsterdam")
.averageValue("City of bicycles")
.entries(5_000)
.maxBloatFactor(5.0)
.createOrRecoverPersistedTo(citiesAndDescriptions);
当大小约为 25 000 时,它将开始抛出 IllegalStateException
尝试插入新条目。
但是,当实际大小远远超过配置大小时,Chronicle Map 的工作速度会逐渐变慢,因此最大可能的 maxBloatFactor()
被人为限制为 1000。
现在的解决方案是通过entries()
(和averageKey()
,以及averageValue()
) 至少大致正确。
提前配置合理的 Chronicle Map 大小的要求被认为是一个可用性问题。 There is a way to fix this and it's on the project roadmap.
In other words, please explain how memory is managed in case of under-estimation and over-estimation of the value (and/or key) lengths and number of entries.
键/值大小低估: hash lookup area 中的空间被浪费了, ~ 8 字节 * 低估因子,每个条目。因此,如果实际平均条目大小(键 + 值)很小,则可能会很糟糕,例如。 G。 50 个字节,而您将其配置为 20 个字节,您将浪费 ~ 8 * 50/20 = 20 个字节,或 40%。平均条目大小越大,浪费越小。
键/值大小高估:如果您只配置键和值的平均大小,而不是 actualChunkSize()
直接地,实际 block 大小自动选择在平均条目大小(键+值)的 1/8 到 1/4 之间。实际的 chunk 大小是 Chronicle Map 中的分配单元。因此,如果您将平均条目大小配置为 ~ 1000 字节,则实际 block 大小将选择在 125 到 250 字节之间。如果实际平均条目大小仅为 100 字节,您将损失大量空间。如果高估很小,则预期的空间损失将限制在数据大小的 20% 左右。
因此,如果您担心可能会高估平均键/值大小,请配置 actualChunkSize()
明确地。
条目数被低估:上文已讨论。没有特别的空间浪费,但 Chronicle Map 运行速度较慢,低估越严重。
条目数高估: 哈希查找区域内存浪费,每个条目约 8 字节 * 高估因子。请参阅上面的键/值大小低估部分,了解它的好坏取决于实际的平均条目数据大小。
关于java - OpenHFT Chronicle Map 内存分配和限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39320687/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!