java - 应用程序在 JVM 1.6_33 中崩溃,而在 1.7_25 中不崩溃

标签 java multithreading arraylist crash jvm

当我们从 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 的崩溃是否与上述有关,或者是否是同步错误......

感谢您的建议, 根

最佳答案

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

List list = Collections.synchronizedList(arrayList);

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

关于java - 应用程序在 JVM 1.6_33 中崩溃,而在 1.7_25 中不崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20294196/

相关文章:

java - 两个单链表的非破坏性递归相交

java - 使用 ArrayList 条目进行不安全的转换

java - 计算枚举总值 Java

java - 在写入内容之前调用 HttpUrlConnection 上的 getResponseCode 会引发 IOException

java - 向上转换为对象的 ArrayList 然后向下转换为自定义 ArrayList 的成本

python - 运行 Python 延迟循环的最不痛苦的方法

python - 每个 UWSGI 进程运行多个线程有什么好处?

java - ArrayList 与 vector

java - org.springframework.beans.NotReadablePropertyException : Invalid property of bean class

Java 多线程优先级 : Why in this example, 有时 t1 在 t2 完成之前发生,即使 t2 具有更高的优先级?