由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - java的内存管理真是气死我了
相关主题
java code在不同机器上内存消耗差异很大怎么回事?[提问] The JVM could not be started
java 程序的内存评估,运行效率,以及超线程的问题out of memory
Java系统中GC频繁启动是什么原因?被面how to manage heap in java jvm
郁闷Xeon E7- 4850是什么档次的CPU?
C++ IDE求推荐:windows 下的 VC 的转到 linux 下JAVA interview 经常被问如何debug, trouble shooting.
王垠对编程语言的理解还是挺深的java内存问题请教大牛 (转载)
java内存泄露问题紧急求助: java OutOfMemoryError
怎样让java 程序运行快?
相关话题的讨论汇总
话题: java话题: int话题: memory话题: c++话题: jvm
进入Programming版参与讨论
1 (共1页)
w***g
发帖数: 5958
1
一点点数据就out-of-memory了,ft。一个int数组,ArrayList偏偏不支持int,要用In
teger对象,开销一下子增加三四倍。简直就是傻B。4G的内存都不够干个P的。辛辛苦
苦编了好几天的程序没法用了,可能要退回fortran了。
不知道怎么办才好了...
D*******a
发帖数: 3688
2
我觉得java,c#这样的vm语言都不适合做需要用大规模数组运算的东西

In

【在 w***g 的大作中提到】
: 一点点数据就out-of-memory了,ft。一个int数组,ArrayList偏偏不支持int,要用In
: teger对象,开销一下子增加三四倍。简直就是傻B。4G的内存都不够干个P的。辛辛苦
: 苦编了好几天的程序没法用了,可能要退回fortran了。
: 不知道怎么办才好了...

w***g
发帖数: 5958
3
竟然还有人用mapreduce实现矩阵运算的,简直就是笑话。100台机器没有1台机器用
fortran算得快的。

【在 D*******a 的大作中提到】
: 我觉得java,c#这样的vm语言都不适合做需要用大规模数组运算的东西
:
: In

g*****g
发帖数: 34805
4
Did you use -Xmx when you start you JVM?
JVM by default only uses 64MB memory, it doesn't matter how much memory
you have if you don't specify Xmx.
Also, if you don't like ArralyList for whatever reason, use int[] then.

In

【在 w***g 的大作中提到】
: 一点点数据就out-of-memory了,ft。一个int数组,ArrayList偏偏不支持int,要用In
: teger对象,开销一下子增加三四倍。简直就是傻B。4G的内存都不够干个P的。辛辛苦
: 苦编了好几天的程序没法用了,可能要退回fortran了。
: 不知道怎么办才好了...

w***g
发帖数: 5958
5
我用了4000! int[]不能动态长的!等下把16G内存全都用上试试。
我的问题其实很简单。最多500,000个128维浮点数特征向量,两两比较距离,算每个
特征向量的100个最近点。我估算了一下实际用到的内存也就1G都不到:
特征向量: 500,000 * 128 * 4 = 256M
100个最近点: 500,000 * 100 * (4 + 8) = 600M (每个点保存8位id和4位距离)。
我就不知道怎么用java编出来overhead能那么大。

【在 g*****g 的大作中提到】
: Did you use -Xmx when you start you JVM?
: JVM by default only uses 64MB memory, it doesn't matter how much memory
: you have if you don't specify Xmx.
: Also, if you don't like ArralyList for whatever reason, use int[] then.
:
: In

g*****g
发帖数: 34805
6
4000? You mean -Xmx4000M? Also you want to tweak Xms to
avoid runtime allocation.
BTW, unless you are use 64bits JVM, you can't use more than 4G.
Personally we've used single java JVM to accomodate thousands of
concurrent user sessions. I tend to believe it's your own problem.
You can also use JConsole to check your memory usage.

【在 w***g 的大作中提到】
: 我用了4000! int[]不能动态长的!等下把16G内存全都用上试试。
: 我的问题其实很简单。最多500,000个128维浮点数特征向量,两两比较距离,算每个
: 特征向量的100个最近点。我估算了一下实际用到的内存也就1G都不到:
: 特征向量: 500,000 * 128 * 4 = 256M
: 100个最近点: 500,000 * 100 * (4 + 8) = 600M (每个点保存8位id和4位距离)。
: 我就不知道怎么用java编出来overhead能那么大。

w***g
发帖数: 5958
7
我不是dummy的说,跑得是64位的centos和java server模式。先来发泄一下。等下哄小
孩睡下了再来好好解决解决这个问题。
也有肯能使mapreduce framework的问题,实际单个task可用的内存远远小于总的heap
size。

【在 g*****g 的大作中提到】
: 4000? You mean -Xmx4000M? Also you want to tweak Xms to
: avoid runtime allocation.
: BTW, unless you are use 64bits JVM, you can't use more than 4G.
: Personally we've used single java JVM to accomodate thousands of
: concurrent user sessions. I tend to believe it's your own problem.
: You can also use JConsole to check your memory usage.

g*****g
发帖数: 34805
8
Did you specify -d64? If you are not dummy, you can estimate
your memory usage beforehand, and if it's enough, it should be
enough.
I would use JConsole or VisualVM to check what's using the
memory. It could be a memory leak.

【在 w***g 的大作中提到】
: 我不是dummy的说,跑得是64位的centos和java server模式。先来发泄一下。等下哄小
: 孩睡下了再来好好解决解决这个问题。
: 也有肯能使mapreduce framework的问题,实际单个task可用的内存远远小于总的heap
: size。

w***g
发帖数: 5958
9
难道64位Linux下的java默认是按32位工作的?这倒是我见识短了...
多谢goodbug大侠相助。我过几个小时来汇报结果。

【在 g*****g 的大作中提到】
: Did you specify -d64? If you are not dummy, you can estimate
: your memory usage beforehand, and if it's enough, it should be
: enough.
: I would use JConsole or VisualVM to check what's using the
: memory. It could be a memory leak.

g*****g
发帖数: 34805
10
据我所知是这样的。不过64bit 更耗内存。

【在 w***g 的大作中提到】
: 难道64位Linux下的java默认是按32位工作的?这倒是我见识短了...
: 多谢goodbug大侠相助。我过几个小时来汇报结果。

相关主题
王垠对编程语言的理解还是挺深的[提问] The JVM could not be started
java内存泄露问题out of memory
怎样让java 程序运行快?被面how to manage heap in java jvm
进入Programming版参与讨论
g*****g
发帖数: 34805
11
这个多半是你程序写得有问题,dump一下heap看到底都是被啥
吃了吧。

【在 w***g 的大作中提到】
: 我用了4000! int[]不能动态长的!等下把16G内存全都用上试试。
: 我的问题其实很简单。最多500,000个128维浮点数特征向量,两两比较距离,算每个
: 特征向量的100个最近点。我估算了一下实际用到的内存也就1G都不到:
: 特征向量: 500,000 * 128 * 4 = 256M
: 100个最近点: 500,000 * 100 * (4 + 8) = 600M (每个点保存8位id和4位距离)。
: 我就不知道怎么用java编出来overhead能那么大。

D*******a
发帖数: 3688
12
mapreduce的优点不是快,而是可以处理很大的数据(TB级别)

【在 w***g 的大作中提到】
: 竟然还有人用mapreduce实现矩阵运算的,简直就是笑话。100台机器没有1台机器用
: fortran算得快的。

h*****0
发帖数: 4889
13
显然就不应该用ArrayList...

In

【在 w***g 的大作中提到】
: 一点点数据就out-of-memory了,ft。一个int数组,ArrayList偏偏不支持int,要用In
: teger对象,开销一下子增加三四倍。简直就是傻B。4G的内存都不够干个P的。辛辛苦
: 苦编了好几天的程序没法用了,可能要退回fortran了。
: 不知道怎么办才好了...

w***g
发帖数: 5958
14
有什么更好的类可以用?类似于c++的vector那种。

【在 h*****0 的大作中提到】
: 显然就不应该用ArrayList...
:
: In

r*********r
发帖数: 3195
15
用 c++.
h*****0
发帖数: 4889
16
你这个是计算程序啊。直接开个int[]就可以了。最多包在一个类里,类里面再加几个
属性来标记当前用到的是哪些数据。
c++里的vector基本上就是这么实现的。

【在 w***g 的大作中提到】
: 有什么更好的类可以用?类似于c++的vector那种。
c*****t
发帖数: 1879
17
Come on. It should take you less than 15 min to write one from scratch.
Lazy...

【在 w***g 的大作中提到】
: 有什么更好的类可以用?类似于c++的vector那种。
d****p
发帖数: 685
18
楼主都说了int[]是静态的长度不能变.

【在 h*****0 的大作中提到】
: 你这个是计算程序啊。直接开个int[]就可以了。最多包在一个类里,类里面再加几个
: 属性来标记当前用到的是哪些数据。
: c++里的vector基本上就是这么实现的。

d****p
发帖数: 685
19
如果计算过程中数组长度不变,可以先用ArrayList生成数据在在计算前再转
成int[]
如果计算过程中数组动态,只能自己写容器了.或者用c++

In

【在 w***g 的大作中提到】
: 一点点数据就out-of-memory了,ft。一个int数组,ArrayList偏偏不支持int,要用In
: teger对象,开销一下子增加三四倍。简直就是傻B。4G的内存都不够干个P的。辛辛苦
: 苦编了好几天的程序没法用了,可能要退回fortran了。
: 不知道怎么办才好了...

b******e
发帖数: 1861
20
use cern colt library.
It has IntArrayList, LongArrayList etc. Good fit for your program.
相关主题
Xeon E7- 4850是什么档次的CPU?紧急求助: java OutOfMemoryError
JAVA interview 经常被问如何debug, trouble shooting.java code在不同机器上内存消耗差异很大怎么回事?
java内存问题请教大牛 (转载)java 程序的内存评估,运行效率,以及超线程的问题
进入Programming版参与讨论
d****p
发帖数: 685
21
Interesting. Is it efficient? Noticed that it has a beforeInsert function.
If the implementation is aimed at
balancing support for both array and list, I doubt it will be faster than a
hand-written simple int container.

【在 b******e 的大作中提到】
: use cern colt library.
: It has IntArrayList, LongArrayList etc. Good fit for your program.

g*****g
发帖数: 34805
22
你以为ArrayList怎么来的,一样是用静态int[],然后不够了
加倍复制。

【在 d****p 的大作中提到】
: 楼主都说了int[]是静态的长度不能变.
d****p
发帖数: 685
23
I am not a Java guy :-)
But I doubt ArrayList's internal implementation is based array. It could be,
of course.

【在 g*****g 的大作中提到】
: 你以为ArrayList怎么来的,一样是用静态int[],然后不够了
: 加倍复制。

g*****g
发帖数: 34805
24
It is, java is open source, you can check yourself.

be,

【在 d****p 的大作中提到】
: I am not a Java guy :-)
: But I doubt ArrayList's internal implementation is based array. It could be,
: of course.

r*********r
发帖数: 3195
25
还是不要看的好. 惨不忍睹. 到了关键处就 native method 了.
回过头还得看它的 c/c++ 代码.
z*****a
发帖数: 3809
26
为什么要用Java?

In

【在 w***g 的大作中提到】
: 一点点数据就out-of-memory了,ft。一个int数组,ArrayList偏偏不支持int,要用In
: teger对象,开销一下子增加三四倍。简直就是傻B。4G的内存都不够干个P的。辛辛苦
: 苦编了好几天的程序没法用了,可能要退回fortran了。
: 不知道怎么办才好了...

k*****c
发帖数: 1670
27
就是啊,用C/C++,多简单。

【在 r*********r 的大作中提到】
: 用 c++.
t********e
发帖数: 880
28
java generics are so much inferior to c++ templates
d****p
发帖数: 685
29
En, in C++ std::vector is almost as efficient as raw array.
Also, seems there is no way to disable array boundary check in Java?

【在 t********e 的大作中提到】
: java generics are so much inferior to c++ templates
h*****0
发帖数: 4889
30
int[] buffer
长度不够时
int[] oldBuffer = buffer;
buffer = new int[newLength];
copy oldBuffer to buffer
java数组是动态new的,又不是声明多长是多长,怕什么长度不够?

【在 d****p 的大作中提到】
: 楼主都说了int[]是静态的长度不能变.
相关主题
java 程序的内存评估,运行效率,以及超线程的问题C++ IDE求推荐:windows 下的 VC 的转到 linux 下
Java系统中GC频繁启动是什么原因?王垠对编程语言的理解还是挺深的
郁闷java内存泄露问题
进入Programming版参与讨论
h*****0
发帖数: 4889
31
这种计算程序在这里有效率问题,当然就应该自己根据需要写一个

a

【在 d****p 的大作中提到】
: Interesting. Is it efficient? Noticed that it has a beforeInsert function.
: If the implementation is aimed at
: balancing support for both array and list, I doubt it will be faster than a
: hand-written simple int container.

h*****0
发帖数: 4889
32
不能手动去除。但是编译器会自动优化。
java设计的理念就是安全,结构好,而不太注重效率。

【在 d****p 的大作中提到】
: En, in C++ std::vector is almost as efficient as raw array.
: Also, seems there is no way to disable array boundary check in Java?

w***g
发帖数: 5958
33
期待编译型语言的mapreduce framework出现。不过现在只能凑活着用java了。

【在 d****p 的大作中提到】
: En, in C++ std::vector is almost as efficient as raw array.
: Also, seems there is no way to disable array boundary check in Java?

w***g
发帖数: 5958
34
快发现问题所在了。貌似hadoop给每个mapper task分配的内存一共只有30MB。估计再g
oogle一阵就能解决了。
确实不是java的问题。

In

【在 w***g 的大作中提到】
: 一点点数据就out-of-memory了,ft。一个int数组,ArrayList偏偏不支持int,要用In
: teger对象,开销一下子增加三四倍。简直就是傻B。4G的内存都不够干个P的。辛辛苦
: 苦编了好几天的程序没法用了,可能要退回fortran了。
: 不知道怎么办才好了...

c**t
发帖数: 2744
35
回头好好总结下哈

再g

【在 w***g 的大作中提到】
: 快发现问题所在了。貌似hadoop给每个mapper task分配的内存一共只有30MB。估计再g
: oogle一阵就能解决了。
: 确实不是java的问题。
:
: In

T*******i
发帖数: 4992
36
java搞数值计算?
自己找麻烦

In

【在 w***g 的大作中提到】
: 一点点数据就out-of-memory了,ft。一个int数组,ArrayList偏偏不支持int,要用In
: teger对象,开销一下子增加三四倍。简直就是傻B。4G的内存都不够干个P的。辛辛苦
: 苦编了好几天的程序没法用了,可能要退回fortran了。
: 不知道怎么办才好了...

w***g
发帖数: 5958
37
Hadoop源代码中有这么一行
TaskRunner.java: String javaOpts = conf.get("mapred.child.java.opts", "
-Xmx200m");
也就是说如果不设置这个参数的话,每个task最多只有200m内存。再刨掉hadoop本身用
的,也就每个task 30m的样子,远远不够用。把这个参数调大道2000m就不再出错了。

In

【在 w***g 的大作中提到】
: 一点点数据就out-of-memory了,ft。一个int数组,ArrayList偏偏不支持int,要用In
: teger对象,开销一下子增加三四倍。简直就是傻B。4G的内存都不够干个P的。辛辛苦
: 苦编了好几天的程序没法用了,可能要退回fortran了。
: 不知道怎么办才好了...

g****y
发帖数: 436
38
这个数算是magic number?难以相信。

"

【在 w***g 的大作中提到】
: Hadoop源代码中有这么一行
: TaskRunner.java: String javaOpts = conf.get("mapred.child.java.opts", "
: -Xmx200m");
: 也就是说如果不设置这个参数的话,每个task最多只有200m内存。再刨掉hadoop本身用
: 的,也就每个task 30m的样子,远远不够用。把这个参数调大道2000m就不再出错了。
:
: In

w***g
发帖数: 5958
39
In general, open source里面龌龊的东西多的去了,能跑起来就谢天谢地了。

【在 g****y 的大作中提到】
: 这个数算是magic number?难以相信。
:
: "

d*****d
发帖数: 180
40
自己手潮不要赖open source
相关主题
怎样让java 程序运行快?被面how to manage heap in java jvm
[提问] The JVM could not be startedXeon E7- 4850是什么档次的CPU?
out of memoryJAVA interview 经常被问如何debug, trouble shooting.
进入Programming版参与讨论
g*****g
发帖数: 34805
41
No, obviously it's configurable from the configuration, the
200M is just a default value.
I bet this property is documented in Hadoop docs.

【在 g****y 的大作中提到】
: 这个数算是magic number?难以相信。
:
: "

g*****g
发帖数: 34805
42
Honestly, this is in their cluster setup guide.
http://hadoop.apache.org/common/docs/current/cluster_setup.html
It shouldn't be difficult to find out by googling.

【在 w***g 的大作中提到】
: In general, open source里面龌龊的东西多的去了,能跑起来就谢天谢地了。
s********v
发帖数: 288
43
-Xmx200m明显是默认的
javaOpts是读配置文件的吧

"
辛苦

【在 w***g 的大作中提到】
: Hadoop源代码中有这么一行
: TaskRunner.java: String javaOpts = conf.get("mapred.child.java.opts", "
: -Xmx200m");
: 也就是说如果不设置这个参数的话,每个task最多只有200m内存。再刨掉hadoop本身用
: 的,也就每个task 30m的样子,远远不够用。把这个参数调大道2000m就不再出错了。
:
: In

n***d
发帖数: 8857
44
用c 呀,自己管理内存多爽。

【在 g*****g 的大作中提到】
: No, obviously it's configurable from the configuration, the
: 200M is just a default value.
: I bet this property is documented in Hadoop docs.

1 (共1页)
进入Programming版参与讨论
相关主题
java code在不同机器上内存消耗差异很大怎么回事?[提问] The JVM could not be started
java 程序的内存评估,运行效率,以及超线程的问题out of memory
Java系统中GC频繁启动是什么原因?被面how to manage heap in java jvm
郁闷Xeon E7- 4850是什么档次的CPU?
C++ IDE求推荐:windows 下的 VC 的转到 linux 下JAVA interview 经常被问如何debug, trouble shooting.
王垠对编程语言的理解还是挺深的java内存问题请教大牛 (转载)
java内存泄露问题紧急求助: java OutOfMemoryError
怎样让java 程序运行快?
相关话题的讨论汇总
话题: java话题: int话题: memory话题: c++话题: jvm