m**d 发帖数: 14 | 1 我有一个socket,给我一段一段stream。我要把它存到mysql的一个blob里面去。有一
个问题是,我不能按照原始stream的顺序存,而必须反过来存,比如进来的数据如果是:
line1111
line2222
line3333
那存在数据库里就必须是:
line3333
line2222
line1111
所以我不能直接吧stream迭代到mysql sql statement哪里去。我现在是手工把原始数
据搞成serizliable的object, 再把每次读进来一组array of object 转成bytes,再把bytes写到数据库。结果eclipse就崩溃了说Exception in thread "
main" java.lang.OutOfMemoryError: Java heap space
这个东西应该怎么样搞比较好?谢谢 |
g*****g 发帖数: 34805 | 2 What you are doing is fine, set
-Xms256m -Xmx512m or something like that for JVM.
是:
【在 m**d 的大作中提到】 : 我有一个socket,给我一段一段stream。我要把它存到mysql的一个blob里面去。有一 : 个问题是,我不能按照原始stream的顺序存,而必须反过来存,比如进来的数据如果是: : line1111 : line2222 : line3333 : 那存在数据库里就必须是: : line3333 : line2222 : line1111 : 所以我不能直接吧stream迭代到mysql sql statement哪里去。我现在是手工把原始数
|
F****n 发帖数: 3271 | 3 两个可能,1)程序里面有死循环;2)In memory 数据量太大,没设buffer size;
buffer 满了就应该写DB然后清掉再用。
【在 g*****g 的大作中提到】 : What you are doing is fine, set : -Xms256m -Xmx512m or something like that for JVM. : : 是:
|
g*****g 发帖数: 34805 | 4 Not neccesary, Java by default uses only 64MB I believe, which is
way too small for many applications. A search on tables using blob
can cause outofmemory easily.
【在 F****n 的大作中提到】 : 两个可能,1)程序里面有死循环;2)In memory 数据量太大,没设buffer size; : buffer 满了就应该写DB然后清掉再用。
|
m******t 发帖数: 2416 | 5
It's not necessarily always possible in OP's case, which
is essentially a stack of items. It's really at the mercy
of whoever is sending the data. 8-)
【在 F****n 的大作中提到】 : 两个可能,1)程序里面有死循环;2)In memory 数据量太大,没设buffer size; : buffer 满了就应该写DB然后清掉再用。
|
b******y 发帖数: 9224 | 6 I think you should first write it to a temporary file, then, spool that file
out to the mysql db.
Java is not good at memory utilization, but, on the other hand, you shouldn'
t store the stuff in memory either... |
m**d 发帖数: 14 | 7 更新一下,还是改成顺序记录了,用inputstream传。端口的数据量也不算很大,最后
转成bytes也就几十m,端口进来的总量应该是这个的接近4倍。有个发现,jdbc, pstmt
.setBytes(int, byte []) 貌似会把这个byte []再自己拷贝一遍,是在stacktrace里
看到的一个copyto/tocopy之类的function,不过不确定,不知道caller是什么,是不
是deep copy.
eclipse.ini:
-Xms512m
-Xmx1024m
-XX:+UseParallelGC
-XX:PermSize=256M
-XX:MaxPermSize=512M |