【问题标题】:Application crashes with JVM 1.6_33 and not with 1.7_25JVM 1.6_33 而不是 1.7_25 的应用程序崩溃
【发布时间】:2013-11-29 22:30:32
【问题描述】:

在我们从 Vector 更改为 ArrayList 后,我​​们的应用程序仅在 windows 上的 JVM 1.6_33 上崩溃。 我们在多线程环境中工作。我怀疑发生崩溃是因为对 ArrayList 的访问不同步。 Java 错误日志指向读取和更改此 ArrayList 的方法: com.swt.lib.ConnectionPool.getConnection(I)Lcom/swt/lib/Connection;+10

如果我同步相应的方法,应用程序也不会崩溃。 该应用程序正在处理: - Linux 上的 JVM 1.6_33 或 1.7_25 - Windows 上的 JVM 1.7_25

它从 Vector 更改为 ArrayList 有一些原因,但我不记得了。所以我不想改回来。

由于我不确切知道问题发生在代码中的哪个位置,因此我无法发布确切的代码。我有一个 ConnectionPool,我怀疑问题出在此处:

public Connection getConnection(ArrayList<Connection> connectionPool){
        Connection connection = connectionPool.get(0);
        connectionPool.remove(0);
return connection;
    }   
    public void free(Connection connection, ArrayList<Connection> connectionPool){
        connectionPool.add(connection);
    }

在我们使用 ArrayList 之前,我们使用了 Vector。如果是同步错误应该是有异常,没有JVM崩溃?

应用程序大约每 24 小时崩溃一次。

现在应用程序在 JVM 1.7_25 上运行。但我不相信它会一直这样。

有谁知道为什么它适用于 JVM 1.7_25 而不适用于 1.6_33?

我忘记发布错误名称:Exception_Access_Violation

我刚刚在 www.java.com 上看到了一条建议:http://www.java.com/en/download/help/exception_access.xml

不知道JVM的crash是不是跟上面提到的有关系还是同步错误...

感谢您的任何建议, 根

【问题讨论】:

  • 能贴出相关代码吗?谢谢!
  • 请显示异常的堆栈跟踪(或至少它的前几行)。
  • 这是一个 Exception_Access_Violation。同步错误会导致 JVM 崩溃吗?感谢您的任何建议....

标签: java multithreading arraylist crash jvm


【解决方案1】:

听起来您的代码可能正在进行一些并发访问;问题很可能是间歇性的。你有没有考虑过使用synchronizedList

List list = Collections.synchronizedList(arrayList);

否则,我只需将对列表实例的访问与synchronized(list) 块(您报告的有效)同步。

【讨论】:

  • 感谢您对 Elliott 的评论。我认为你的提议是我们必须做的。我不想同步整个块,因为我害怕死锁。但是你知道吗,为什么windows和Linux和JVM 1.6和1.7会有区别?
  • 因为 Windows 和 Linux 是不同的。 JVM 1.6 和 1.7 是不同的。而且,我怀疑您的问题实际上是间歇性的。如果您有一小段代码会一直导致此问题,请发布,我会看看是否可以解释。
  • 仅当您使用 ArrayList 的快速失败形式时。这看起来不像是“一个”(安全的)连接池。也许使用DBCP
  • 是的,我认为我们应该实现 ArrayList 的快速失败形式。后来可能是DBCP。但是如果出现同步错误,我不应该得到一个正常的异常,而不是来自 JVM 的 Exception_Access_Violation 吗?
  • 如果你使用 ArrayList 的快速失败形式,我想你会看到很多正常的异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多