各位关心我问题的达达们,谢谢你们:我现在是想串行化一个具有100W数据的平衡二叉树结构,很显然串行化的时候 WriteObject(root)//这个root 就是平衡二叉树的根结点,但是串行化的时候出问题了,
直接 java.lang.stack over flow,后来自己想了好久才发现,java串行化的时候好像并不是先保存root这个结点,而是不断地递归,直到没有跟root结点的相关信息为止,也就是需要个栈 不断保存临时结点……。
我现在就是想直到如何解决 串行化时候的 stack over flow 这个异常……,树结构肯定要保存的额,肯定不能用数组来保存这个数据信息——我后面要用这100W信息 做查询用,所以请教各位达达,到底该怎么保存这100W数据才能防止 栈溢出错误,有人说用B+树,B+树的层次是浅了,但是可能是我对串行化的原理不理解,还请达达我们讲讲 串行化的整个过程……谢谢了 我分不多…… 就当是讨论 可以么……

解决方案 »

  1.   

    如果确定程序没有问题,那就用-Xss参数比如-Xss1024M增加栈容量
      

  2.   

    哥们你的想法不能真正的解决问题额,我刚才测试过了,java的串行化是个递归过程,也就是说是先保存各个对象的状态,就像保存一个树一样,测试的时候保存一个100W的int数组可以,但是保存一个100W的链表就不行了 ,你可以试试哦
      

  3.   

    可以试着自己实现持久化,或者使用XStream,持久化成xml。
    还有,你也可以不直接持久化树根,而是将树根下的第一层分别持久化,恢复的时候也稍微麻烦点,
    不知道你的一个子树有多少记录。没办法,java默认的持久化实现就是有性能问题,因为这些数据会缓冲在ObjectOutputStream的缓存里,这样相当于占用了两倍的内存啊。