由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - Java简直完全不可控啊!!!
相关主题
请教:performance issue请教一个Queue实现的问题
zhaoce大牛能不能high level的讲解一下java concurrency?如何删除 linked list 的最后一个元素
急问:怎么kill一个thread, thread.interrupte()不好用呀?Java是如何处理ArrayList和LinkedList的内存的?
NoThread concurrencysynchronization for counters
请教高手如何用JUnit模拟真实的Servlet容器 (e.g. Jboss里的tomcat), 具体需求请进请教一个java多线程的概念问题
maven,struts求助Re: NetBean problem
Java Tools and Technologies Landscape for 2014what's inside an java object?
junit test问题How to know the size of a java object ?
相关话题的讨论汇总
话题: long话题: object话题: linkedlist话题: new话题: 运行
进入Java版参与讨论
1 (共1页)
z***e
发帖数: 5393
1
也可能是我太白痴哈。
很简单一个东西,我用maven的junit跑几个unit test,就是比较一下linear遍历和
threadpool并发处理,看时间的差异,也就大概是这样的东西:
public void test() {
int N=10000;
List data = new LinkedList();
// 先initialize
data.add(new Long[N]);
data.add(new Long[N]);
data.add(new Long[N]);
data.add(new Long[N]);
for(Long[] array :data) {
... //往里面填点数字
}
// 1. linear process
for(Long[] array : data) {
for(int i=0; i if (array[i]%2 == 0) {
// 做一些简单计算
}
}
}
// 2. parallel
ExecutorService executor = Executors.newFixedThreadPool(4);
Collection> threads = new LinkedList>();
List> executionResult = new LinkedList>();
for(Long[] array : data) {
// TestThread是一个简单的Callable class
threads.add(new TestThread(locations, result));
}
executionResult = executor.invokeAll(threads);
...
}
我主要是对比1和2的运行速度,结果发现先运行1还是先运行2,结果不同(先运行的
要慢些,后运行的要快些)。分成两个junit method跑也不行,还是有个先后关系。唯
一可靠点的就是分成两次跑,每次只跑一个(1或者2)---这样太愚蠢的感觉...
r*****l
发帖数: 2859
2
如果N比较小,那Java和Maven启动时间等等带来的误差会影响结果。把N弄大点,让程
序可以运行10分钟,再比较一下。

【在 z***e 的大作中提到】
: 也可能是我太白痴哈。
: 很简单一个东西,我用maven的junit跑几个unit test,就是比较一下linear遍历和
: threadpool并发处理,看时间的差异,也就大概是这样的东西:
: public void test() {
: int N=10000;
: List data = new LinkedList();
: // 先initialize
: data.add(new Long[N]);
: data.add(new Long[N]);
: data.add(new Long[N]);

m****r
发帖数: 6639
3
try try forkMode=always

【在 r*****l 的大作中提到】
: 如果N比较小,那Java和Maven启动时间等等带来的误差会影响结果。把N弄大点,让程
: 序可以运行10分钟,再比较一下。

z***e
发帖数: 5393
4
把N设大有另一个问题,超过2G好像就不行了,比如:
long[2000000]
前面我说两个运行顺序有影响结果,我怀疑是jvm的garbage collection的干扰,如果数组变大,可能garbage在内存快耗尽的情况下影响更大...
我没仔细调,因为还有其他Memory allocation跟这个N有关。我主要是比较大数据量简
单运算(就是比较比较大小然后对另一个map写一下flag)下multi-threads和Linear的
差别。

【在 r*****l 的大作中提到】
: 如果N比较小,那Java和Maven启动时间等等带来的误差会影响结果。把N弄大点,让程
: 序可以运行10分钟,再比较一下。

g**e
发帖数: 6127
5
did you set up max heap size?

果数组变大,可能garbage在内存快耗尽的情况下影响更大...

【在 z***e 的大作中提到】
: 把N设大有另一个问题,超过2G好像就不行了,比如:
: long[2000000]
: 前面我说两个运行顺序有影响结果,我怀疑是jvm的garbage collection的干扰,如果数组变大,可能garbage在内存快耗尽的情况下影响更大...
: 我没仔细调,因为还有其他Memory allocation跟这个N有关。我主要是比较大数据量简
: 单运算(就是比较比较大小然后对另一个map写一下flag)下multi-threads和Linear的
: 差别。

g*****g
发帖数: 34805
6
你既然要比运行速度,前面初始化的那部分不应该计时。

【在 z***e 的大作中提到】
: 也可能是我太白痴哈。
: 很简单一个东西,我用maven的junit跑几个unit test,就是比较一下linear遍历和
: threadpool并发处理,看时间的差异,也就大概是这样的东西:
: public void test() {
: int N=10000;
: List data = new LinkedList();
: // 先initialize
: data.add(new Long[N]);
: data.add(new Long[N]);
: data.add(new Long[N]);

z***e
发帖数: 5393
7
我设了
set MAVEN_OPTS=-Xmx4096m
(windows下)
然后在maven里面跑了这么一个test程序:
int N = 100000000;

try {

LinkedList buffer = new LinkedList ();

for(int i=0;i buffer.add((long)i);

if (i % 1000000 == 0) {
System.out.println("added " + i);

}
}
catch(Exception e)
{...}
然后就不行了,exception也不throw就fail掉,插入6000000个之后。
这没道理啊,才6M个Long,一个Long 8 byte,算reference本身8 bytes的话,还有其它
object本身的东西,加起来最多几百M了不起了,怎么就fail掉了?

【在 g**e 的大作中提到】
: did you set up max heap size?
:
: 果数组变大,可能garbage在内存快耗尽的情况下影响更大...

i**w
发帖数: 883
8
一个Long大概是24 bytes,你这个是24 * 100 * 1000 * 1000 差不多是2G
http://devblog.streamy.com/2009/07/24/determine-size-of-java-ob
F****n
发帖数: 3271
9
Obviously it's due to the overhead of initialization.

果数组变大,可能garbage在内存快耗尽的情况下影响更大...

【在 z***e 的大作中提到】
: 把N设大有另一个问题,超过2G好像就不行了,比如:
: long[2000000]
: 前面我说两个运行顺序有影响结果,我怀疑是jvm的garbage collection的干扰,如果数组变大,可能garbage在内存快耗尽的情况下影响更大...
: 我没仔细调,因为还有其他Memory allocation跟这个N有关。我主要是比较大数据量简
: 单运算(就是比较比较大小然后对另一个map写一下flag)下multi-threads和Linear的
: 差别。

1 (共1页)
进入Java版参与讨论
相关主题
How to know the size of a java object ?请教高手如何用JUnit模拟真实的Servlet容器 (e.g. Jboss里的tomcat), 具体需求请进
Java练习题 10maven,struts求助
how to get thread ID from inside a Callable or Runnable ?Java Tools and Technologies Landscape for 2014
能不能讲讲IB和对冲的java developer的面试,大概会面什么junit test问题
请教:performance issue请教一个Queue实现的问题
zhaoce大牛能不能high level的讲解一下java concurrency?如何删除 linked list 的最后一个元素
急问:怎么kill一个thread, thread.interrupte()不好用呀?Java是如何处理ArrayList和LinkedList的内存的?
NoThread concurrencysynchronization for counters
相关话题的讨论汇总
话题: long话题: object话题: linkedlist话题: new话题: 运行