相关疑难解决方法(0)

Java 8 hashmap高内存使用率

我使用hashmap存储QTable来实现强化学习算法.我的hashmap应该存储15000000个条目.当我运行算法时,我看到进程使用的内存超过1000000K.当我计算内存时,我预计它的使用量不会超过530000K.我试着写一个例子,我得到了相同的高内存使用率:

public static void main(String[] args) {
    HashMap map = new HashMap<>(16_000_000, 1);
    for(int i = 0; i < 15_000_000; i++){
        map.put(i, i);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的记忆力:

每个入口集为32字节
容量为15000000
HashMap实例使用:32*SIZE + 4*CAPACITY memory =(15000000*32 + 15000000*4)/ 1024 = 527343.75K

我的记忆计算错在哪里?

java memory hashmap

8
推荐指数
1
解决办法
4204
查看次数

如何在 Lucene 文档中定义主键字段以获得最佳查找性能?

在我的 Lucene 索引 (v7.2) 中创建文档时,我uid向其中添加了一个包含唯一 ID/键(字符串)的字段:

doc.add(new StringField("uid",uid,Field.Store.YES))
Run Code Online (Sandbox Code Playgroud)

为了稍后检索该文档,我为给定的唯一 id 创建了一个 TermQuery 并使用 IndexSearcher 进行搜索:

searcher.search(new TermQuery(new Term("uid",uid)),1)
Run Code Online (Sandbox Code Playgroud)

作为一个Lucene“新手”,我想知道以下几点:

  1. 我应该如何改进这种方法以获得最佳查找性能? 例如,如果我将唯一 id 存储为字节数组而不是字符串,它会有所不同吗?或者是否有一些可以使用的特殊编解码器或过滤器?

  2. 通过唯一 ID 查找文档的时间复杂度是多少?由于索引至少包含每个文档的一个唯一术语,查找时间将随文档数量(O(n))线性增加,对吗?

lucene

6
推荐指数
1
解决办法
1382
查看次数

标签 统计

hashmap ×1

java ×1

lucene ×1

memory ×1