当我们从 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/