由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 一个Java问题: 怎么支持很大的HashMap?
相关主题
GCJ2009Re: 大妈问一下JAVA的编程平台就是需要安装上JAVA就行了?
看到有人说跨平台哈C++ and java
语言这个东西背后其实就是政治斗争请问java有类似fsync之类的方法?
Java必然败在oracle身上JAVA 如何调用现成的dll
java是最好的语言【失败感言】我是做PHP的 (转载)
今天第一次在windows上倒腾vert.x一个嵌入式系统的设计构思
关于 Java 的 Log 轮子Linux/C++的工作好难找
javascript 真的来自于java上的script?JAVA vs C/C++之争, 我来做个小结吧
相关话题的讨论汇总
话题: java话题: hashmap话题: os话题: memory话题: enough
进入Programming版参与讨论
1 (共1页)
n*********2
发帖数: 357
1
在编一个Java程序。需要生成一个很大的HashMap(这个生成的操作只做一次)。 然后
多次查询这个HashMap。
现在发现这个HashMap很大, 初算了一下估计有70G.
在用Java 直接运行程序的时候出现java.lang.OutOfMemoryError: Java heap space
在命令行用 -Xmx65536m 后Java 报错OpenJDK 64-Bit Server VM warning: INFO: os:
:commit_memory(0x00007febd1000000, 7818182656, 0) failed; error='Not enough
space' (errno=12)
机器的OS是Linux Mint 19.2 Tina;memory size 是32G
大伙碰到过这个情形吗?这个怎么解决?
谢谢!
t*****y
发帖数: 17
2
Is the key or value primitive type? How many entries in the map ?

os:
enough

【在 n*********2 的大作中提到】
: 在编一个Java程序。需要生成一个很大的HashMap(这个生成的操作只做一次)。 然后
: 多次查询这个HashMap。
: 现在发现这个HashMap很大, 初算了一下估计有70G.
: 在用Java 直接运行程序的时候出现java.lang.OutOfMemoryError: Java heap space
: 在命令行用 -Xmx65536m 后Java 报错OpenJDK 64-Bit Server VM warning: INFO: os:
: :commit_memory(0x00007febd1000000, 7818182656, 0) failed; error='Not enough
: space' (errno=12)
: 机器的OS是Linux Mint 19.2 Tina;memory size 是32G
: 大伙碰到过这个情形吗?这个怎么解决?
: 谢谢!

F****n
发帖数: 3271
3
Use a persistence-enabled data store such as elasticsearch.

os:
enough

【在 n*********2 的大作中提到】
: 在编一个Java程序。需要生成一个很大的HashMap(这个生成的操作只做一次)。 然后
: 多次查询这个HashMap。
: 现在发现这个HashMap很大, 初算了一下估计有70G.
: 在用Java 直接运行程序的时候出现java.lang.OutOfMemoryError: Java heap space
: 在命令行用 -Xmx65536m 后Java 报错OpenJDK 64-Bit Server VM warning: INFO: os:
: :commit_memory(0x00007febd1000000, 7818182656, 0) failed; error='Not enough
: space' (errno=12)
: 机器的OS是Linux Mint 19.2 Tina;memory size 是32G
: 大伙碰到过这个情形吗?这个怎么解决?
: 谢谢!

n*********2
发帖数: 357
4
谢谢回复。
> Is the key or value primitive type?
No.
> How many entries in the map ?
About 70*10^9 (70 billions).
原以为JVM会自动把这个swap到硬盘上虚拟内存里面的。 但是感觉不是。

【在 t*****y 的大作中提到】
: Is the key or value primitive type? How many entries in the map ?
:
: os:
: enough

t*****y
发帖数: 17
5
This need way more than 70G memory, this is 70 billion entries. You have a
problem in “big data” domain.
Guess it’s one time job since you were building in memory map without
persistence. Recommend Apache Spark job to join the two data set by key. One
dataset would be the map, the other one would be the keys to lookup. Launch
the spark job in local mode with 32G memory, it should push pretty hard on
the resource usage.

【在 n*********2 的大作中提到】
: 谢谢回复。
: > Is the key or value primitive type?
: No.
: > How many entries in the map ?
: About 70*10^9 (70 billions).
: 原以为JVM会自动把这个swap到硬盘上虚拟内存里面的。 但是感觉不是。

s******e
发帖数: 3
6
Java heap momery 常驻内存,不会被swap。elasticsearch 的性能对内存依赖也很大
。70B
的数据,放在哪儿都不好处理。RDBMS单表70B,性能肯定不行;Elasticsearch,一个
70B的索引,本身用的内存就很吓人 ;搞Hadoop,搭个集群都需要很多机器。还是要看
具体应用,数据来源,格式和应用如何使用和处理,当然还有硬件资源情况。

a
One
Launch
on

【在 t*****y 的大作中提到】
: This need way more than 70G memory, this is 70 billion entries. You have a
: problem in “big data” domain.
: Guess it’s one time job since you were building in memory map without
: persistence. Recommend Apache Spark job to join the two data set by key. One
: dataset would be the map, the other one would be the keys to lookup. Launch
: the spark job in local mode with 32G memory, it should push pretty hard on
: the resource usage.

g*********e
发帖数: 14401
s******e
发帖数: 3
8
谢谢分享。level db 看起来不错。不过这个Java port 像个半成品。出于性能和稳定
性,应该考虑 java binding/JNI 方式。放狗搜了一下,看看这个:
https://github.com/fusesource/leveldbjni

【在 g*********e 的大作中提到】
: https://github.com/dain/leveldb
n******t
发帖数: 4406
9
内存 32G,你需要70G,然后觉得出了问题很奇怪?

os:

【在 n*********2 的大作中提到】
: 在编一个Java程序。需要生成一个很大的HashMap(这个生成的操作只做一次)。 然后
: 多次查询这个HashMap。
: 现在发现这个HashMap很大, 初算了一下估计有70G.
: 在用Java 直接运行程序的时候出现java.lang.OutOfMemoryError: Java heap space
: 在命令行用 -Xmx65536m 后Java 报错OpenJDK 64-Bit Server VM warning: INFO: os:
: :commit_memory(0x00007febd1000000, 7818182656, 0) failed; error='Not enough
: space' (errno=12)
: 机器的OS是Linux Mint 19.2 Tina;memory size 是32G
: 大伙碰到过这个情形吗?这个怎么解决?
: 谢谢!

a********c
发帖数: 3657
10

os:
enough
直接写成hdf,ssd查起来并不慢。我这很多上T的,都这样搞。

【在 n*********2 的大作中提到】
: 在编一个Java程序。需要生成一个很大的HashMap(这个生成的操作只做一次)。 然后
: 多次查询这个HashMap。
: 现在发现这个HashMap很大, 初算了一下估计有70G.
: 在用Java 直接运行程序的时候出现java.lang.OutOfMemoryError: Java heap space
: 在命令行用 -Xmx65536m 后Java 报错OpenJDK 64-Bit Server VM warning: INFO: os:
: :commit_memory(0x00007febd1000000, 7818182656, 0) failed; error='Not enough
: space' (errno=12)
: 机器的OS是Linux Mint 19.2 Tina;memory size 是32G
: 大伙碰到过这个情形吗?这个怎么解决?
: 谢谢!

相关主题
关于 Java 的 Log 轮子C++ and java
javascript 真的来自于java上的script?请问java有类似fsync之类的方法?
Re: 大妈问一下JAVA的编程平台就是需要安装上JAVA就行了?JAVA 如何调用现成的dll
进入Programming版参与讨论
g*********e
发帖数: 14401
11
Jni看起来更靠谱

【在 s******e 的大作中提到】
: 谢谢分享。level db 看起来不错。不过这个Java port 像个半成品。出于性能和稳定
: 性,应该考虑 java binding/JNI 方式。放狗搜了一下,看看这个:
: https://github.com/fusesource/leveldbjni

a****i
发帖数: 1182
12
用redis,配置内存大小

os:
enough

【在 n*********2 的大作中提到】
: 在编一个Java程序。需要生成一个很大的HashMap(这个生成的操作只做一次)。 然后
: 多次查询这个HashMap。
: 现在发现这个HashMap很大, 初算了一下估计有70G.
: 在用Java 直接运行程序的时候出现java.lang.OutOfMemoryError: Java heap space
: 在命令行用 -Xmx65536m 后Java 报错OpenJDK 64-Bit Server VM warning: INFO: os:
: :commit_memory(0x00007febd1000000, 7818182656, 0) failed; error='Not enough
: space' (errno=12)
: 机器的OS是Linux Mint 19.2 Tina;memory size 是32G
: 大伙碰到过这个情形吗?这个怎么解决?
: 谢谢!

L*******k
发帖数: 42
13
提供两个思路自己去研究吧
ehcache offload到native memory或者ssd?
或者通过apache ignite搞distributed in-memory grid

os:
enough

【在 n*********2 的大作中提到】
: 在编一个Java程序。需要生成一个很大的HashMap(这个生成的操作只做一次)。 然后
: 多次查询这个HashMap。
: 现在发现这个HashMap很大, 初算了一下估计有70G.
: 在用Java 直接运行程序的时候出现java.lang.OutOfMemoryError: Java heap space
: 在命令行用 -Xmx65536m 后Java 报错OpenJDK 64-Bit Server VM warning: INFO: os:
: :commit_memory(0x00007febd1000000, 7818182656, 0) failed; error='Not enough
: space' (errno=12)
: 机器的OS是Linux Mint 19.2 Tina;memory size 是32G
: 大伙碰到过这个情形吗?这个怎么解决?
: 谢谢!

s******e
发帖数: 3
14
我来帮忙总结一下,各位看看。
1)如果是一次性任务或者硬件资源有限:
1.1)leveldb 或 rocksdb 是个可行的方案
1.2) 考虑上云执行代码
2)如果以后要经常用到,且有预算,就需要多考虑一下,实现从简单到复杂:
2.1)如果就是这一种情况,最简单的就是搞个带256G内存的机器(当然如果数据内存
占用超过200G,就不行了)
2.2)使用高性能SSD,对内存就没有太多要求(本人没有尝试过)- 需要修改代码
2.3)使用leveldb 和 rocksdb + 可选的 SSD,这个是一种很通用,也非常简便的方法
- 需要修改点代码
2.3.1)代码增加 cache 支持。这个其实要看使用情况。这个又是一门学问。需要有针
对性的考虑是否可以用cache,用那种cache 算法。- 代码比较复杂了
2.4)使用牛刀,比如 nosql 等 - 这个需要很多安装维护工作,代码的改动,和学习
新框架,都需要大量时间。
欢迎补充。
w********m
发帖数: 1137
15
弄块SSD,120G的
把value写到ssd,filename就是key
然后把key load到java就可以了,
需要什么就读硬盘就行
kv database都是这样的
但你没必要用kv database
半小时时间max
s******e
发帖数: 3
16
70B 个文件,目录得有多大,查找一次文件需要多长时间?至少目录要hash一下,否则
没法用

【在 w********m 的大作中提到】
: 弄块SSD,120G的
: 把value写到ssd,filename就是key
: 然后把key load到java就可以了,
: 需要什么就读硬盘就行
: kv database都是这样的
: 但你没必要用kv database
: 半小时时间max

n******t
发帖数: 4406
17
第一要做的事情是,别用java。

os:

【在 n*********2 的大作中提到】
: 在编一个Java程序。需要生成一个很大的HashMap(这个生成的操作只做一次)。 然后
: 多次查询这个HashMap。
: 现在发现这个HashMap很大, 初算了一下估计有70G.
: 在用Java 直接运行程序的时候出现java.lang.OutOfMemoryError: Java heap space
: 在命令行用 -Xmx65536m 后Java 报错OpenJDK 64-Bit Server VM warning: INFO: os:
: :commit_memory(0x00007febd1000000, 7818182656, 0) failed; error='Not enough
: space' (errno=12)
: 机器的OS是Linux Mint 19.2 Tina;memory size 是32G
: 大伙碰到过这个情形吗?这个怎么解决?
: 谢谢!

s********k
发帖数: 6180
18
哪些KV store用的是K存在内存?我理解很多都是LSM tree。内存是inmemory table

【在 w********m 的大作中提到】
: 弄块SSD,120G的
: 把value写到ssd,filename就是key
: 然后把key load到java就可以了,
: 需要什么就读硬盘就行
: kv database都是这样的
: 但你没必要用kv database
: 半小时时间max

w********m
发帖数: 1137
19
in memory 和 kv db不一样
LSM tree最后还是hit hard disk

【在 s********k 的大作中提到】
: 哪些KV store用的是K存在内存?我理解很多都是LSM tree。内存是inmemory table
n******t
发帖数: 4406
20
文件系统overhead太高了。如果你只是要个kv,不是特别理想。

【在 w********m 的大作中提到】
: in memory 和 kv db不一样
: LSM tree最后还是hit hard disk

c****f
发帖数: 1102
21
存硬盘 然后索引健在内存里
l***p
发帖数: 358
22
做成多层次的hash?
有人上面讲LSM,那是用来解决重复写index到硬盘低效的,楼主这个是写一次然后
immutable,帮助不大
1 (共1页)
进入Programming版参与讨论
相关主题
Sun当年设计Java的败笔java是最好的语言
其实说穿了, java就是一种可以让初中生廉价劳动力写程序的语言今天第一次在windows上倒腾vert.x
c++程序员不要把头埋在沙子里了关于 Java 的 Log 轮子
有办法在.net里 reference java class吗?javascript 真的来自于java上的script?
GCJ2009Re: 大妈问一下JAVA的编程平台就是需要安装上JAVA就行了?
看到有人说跨平台哈C++ and java
语言这个东西背后其实就是政治斗争请问java有类似fsync之类的方法?
Java必然败在oracle身上JAVA 如何调用现成的dll
相关话题的讨论汇总
话题: java话题: hashmap话题: os话题: memory话题: enough