小编don*_*bes的帖子

深层图导致堆栈溢出:非递归序列化选项?

我们从Java的序列化库中获取StackOverflowErrors.问题是默认的序列化实现是递归的,其深度仅受通过引用网络的最长路径的限制.

我们意识到我们可以覆盖默认方法,但是我们在项目中有数百个连接丰富的类,所以我们对覆盖方法并不热衷.如果存在非递归的通用解决方案(或者至少将递归从堆栈移动到堆),我们会更感兴趣.

我搜索了这个话题,发现只有很多人痛苦地抱怨同样的事情,但大多数这些抱怨来自很多年前.情况有所改善吗?如果没有,我们写一个通用的实现,你有什么建议吗?我们假设有一些原因(对我们来说还不明显)为什么没有人破解这个坚果.从理论上讲,做"正确"听起来应该是可行的.

java recursion serialization non-recursive

6
推荐指数
1
解决办法
1928
查看次数

不修改列表但仍然得到ConcurrentModificationException

在您盯着另一个ConcurrentModificationException问题之前,这不是典型的ConcurrentModificationException问题.

我理解ConcurrentModificationExceptions但我不明白为什么我在下面的代码中得到一个.在下面的'for'中,似乎迭代器继续存在于for循环之外.(在eclipse中使用调试器,我可以看到迭代器在重新启动循环时会保留其jList的modCount值.)

public class ForEachTest {
  public static void main(String[] args) {
    List<Integer> zList = new LinkedList<Integer>();
    List<Integer> jList = new LinkedList<Integer>();
    jList.add(1);

    while (true) {
      for (Integer j : jList) {
        zList.add(17);
        System.out.println(j);
      }
      jList = zList;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

起初我认为这可能是语法糖的问题,但我使用显式迭代器重写了它并运行了相同的行为.

最后,我能够通过将for分成一段时间来重写它,并进行单独的初始化步骤,所以我不是只想让它重新编写才能使它工作.但我想知道这里显示的问题是什么问题.如果可能的话,我更愿意使用for-each语法.

java concurrency

3
推荐指数
1
解决办法
400
查看次数