Java JVM 1.6_33而不是1.7_25导致应用程序崩溃

Java JVM 1.6_33而不是1.7_25导致应用程序崩溃,java,multithreading,arraylist,crash,jvm,Java,Multithreading,Arraylist,Crash,Jvm,我们的应用程序在JVM 1.6_33上崩溃,只有在我们从Vector更改为ArrayList之后,才在windows上崩溃。 我们正在一个多线程环境中工作。我怀疑崩溃的发生是因为对ArrayList的访问不同步。 Java errorlog指向读取和更改此ArrayList的方法: getConnection(I)Lcom/swt/lib/Connection+十, 如果我同步相应的方法,应用程序也不会崩溃。 该应用程序正在进行以下工作: -Linux上的JVM 1.6_33或1.7_25 -w

我们的应用程序在JVM 1.6_33上崩溃,只有在我们从Vector更改为ArrayList之后,才在windows上崩溃。 我们正在一个多线程环境中工作。我怀疑崩溃的发生是因为对ArrayList的访问不同步。 Java errorlog指向读取和更改此ArrayList的方法: getConnection(I)Lcom/swt/lib/Connection+十,

如果我同步相应的方法,应用程序也不会崩溃。 该应用程序正在进行以下工作: -Linux上的JVM 1.6_33或1.7_25 -windows上的JVM 1.7_25

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

因为我不知道问题发生在代码中的什么地方,所以我无法发布确切的代码。我有一个连接池,我怀疑问题在这里的某个地方:

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);
    }
公共连接getConnection(ArrayList connectionPool){
Connection=connectionPool.get(0);
删除连接池(0);
回路连接;
}   
无公共无效(连接、ArrayList连接池){
connectionPool.add(连接);
}
在使用ArrayList之前,我们使用Vector。如果这是一个同步错误,那么应该有一个异常并且没有JVM崩溃

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

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

有人知道为什么它与JVM1.7_25一起工作,而不与1.6_33一起工作吗

我忘记发布错误的名称:异常\u访问\u冲突

我刚刚在www.java.com上看到一条建议:

我想知道JVM的崩溃是否与所提到的同步错误有关

谢谢你的建议,
Roote

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


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

您可以发布相关代码吗?谢谢请显示异常的堆栈跟踪(或至少显示异常的前几行)。这是异常访问冲突。同步错误会导致JVM崩溃吗?谢谢你的建议……谢谢你的评论,艾略特。我认为你的建议是我们必须做的。我不想同步整个区块,因为我害怕死锁。但是你知道为什么windows和Linux以及JVM1.6和JVM1.7之间有区别吗?因为windows和Linux是不同的。JVM1.6和1.7是不同的。我怀疑你的问题实际上是间歇性的。如果你有一小段代码可以持续地导致这种情况,请发布,我会看看是否可以解释。只有当你使用ArrayList的fail fast形式时。这看起来不像是一个“安全”的连接池。可能使用?是的,我认为我们应该实现ArrayList的fail-fast形式。稍后可能是DBCP。但是,如果出现同步错误,我是否应该从JVM获得一个正常异常而不是一个异常访问冲突?如果使用ArrayList的fail fast表单,我认为您将看到很多正常异常。
List list = Collections.synchronizedList(arrayList);