哈哈,新手,不懂,只能帮你顶拉!
UPUPUPUPUPUPUP!

解决方案 »

  1.   

    对于你的问题一,我在这里生成了200000个对象没有问题,我想你的问题在于TestObj这个对象占用的内存空间到底是多大,要不你把这个对象的代码也贴上,大家来帮你测试一下。
      

  2.   

    iceandfire(【OPENSOURCE】) :
    --------------
    我的 TestObject 现在里面就有一个String的成员,然后是简单的get,set,本来还含有一个java.util.Date的,后来出了问题以后我就把那个java.util.Date的成员注释掉了。onefox(一品狐)
    --------------------
    效率的差距太过于明显,即使是现在我的内存不溢出,但是我20,000的时候报错用了半个小时!!!!
    楼下的各位:
    -----------------
    大家给出出主意呀,感激不尽。
      

  3.   

    没有试过,不过你的处理是否得当只得一问?
    java和c++本身就是有一定差别的,你本能把在c++上用的那一套完全的搬到java中你必须先搞清除,在java中的你的应用处理,才能实现你的c++下的算法!
      

  4.   

    回复人: Arias(道) ( ) 信誉:100  2004-04-27 20:15:00  得分:0 
     
     
      没有试过,不过你的处理是否得当只得一问?
    java和c++本身就是有一定差别的,你本能把在c++上用的那一套完全的搬到java中你必须先搞清除,在java中的你的应用处理,才能实现你的c++下的算法!
      
    --------------------------------------------------------------------------
    我知道很多人会说我的把100,000,000 个对象放入内存的方法,这是没有办法的办法,
    实际情况是需要监控100,000,000个对象,而且需要是实时或者近似实时,而且要求跨平台。
    在实际应用中,实际的对象肯定要比TestObj更大......
      

  5.   

    试过同样的数据量,是不会有问题的:~)仅就你这段代码而言,有一点值得商量:
    ...
    for( int i = 0;i<100000;i++){
     TestObj obj = new TestObj();
     java.util.Date date =new Date( random.nextLong()); 
     obj.setDate( date);
     System.out.println(i);
     set.add( obj);
    }
    ...
    这个循环中,相当于你创建了100000个新的TestObj的对象和100000个Date对象。对JAVA来说,创建新对象还是要付出一定代价的。包括分配数据空间和内存空间。而你这些对象其实没有必要使用新的:~)可以改成下面的代码,重复使用同一个对象,这样就会使程序的开销减少很多:
    ...
    TestObj obj;
    java.util.Date date;
    for( int i = 0;i<100000;i++){
     obj = new TestObj();
     date =new Date( random.nextLong()); 
     obj.setDate( date);
     System.out.println(i);
     set.add( obj);
    }
    ...
      

  6.   

    对于你的第2个问题,我用过了java的免费ftp的api了,写得非常好,但现在我不在我的住处,等后天我回去了给你发过去,我留一个我的e_mail:[email protected],你给我封信(地址),我后天好发。
      

  7.   

    楼上的:~)
    一并发个来吧!
    一起学习。谢谢!
    E-Mail:[email protected]
      

  8.   

    marvy(marvy) :------------------
    你说的那个内存消耗的问题,是我估计留下的,因为实际的对象不是TestObj,而是一个很大的东西。
    后来我又做了测试,当 set = new HashSet( 10,000,000);的时候,已经报了内存溢出错误(还没有往里面添加数据呀),
      

  9.   

    我的意见是,你的对象在c++当中保存在栈当中,应该能使用虚拟内存并且地址可以使扩充的。在Java当中使用的都是堆,这是造成溢出的原因,并没有及时垃圾回收。我的建议是,你构造数据类型,就是set的类,然后一次性构造数组。这比你每一次调用构造函数要节省栈空间,并且直接形成堆,并能够及时地垃圾回收,具体的垃圾回收机制在程序员上面有,你可以自己看一下,jvm在运行的时候机制,也是很重要的。至于你的512内存,我很羡慕,但是要知道os显示的内存并不是真实的物理内存的使用值,你的其他应用程序也是要付出内存代价的,可能有一部分硬盘在忙活了,嘎嘎!