Problem with JRE1.5 but not JRE1.4

I have a program, that compiles and runs well on Java 1.4 but has serious trouble on Java 1.5.

I will click a button and then the GUI will freeze for 10 seconds, with the CPU at 60%. It shouldn't be doing anything intensive, just updating a couple of JLists. The problem is very inconsistant. I will remove parts of the code, and the problem happens on some other action.

I've tried this on linux and windows, with the same results. 1.4 good, 1.5 bad. Here is a dump (after sending it a sig 3) while it was in this frozen state. It looks like its waiting for something... what!

Any pointers will be appreciated....

Michael

Full thread dump Java HotSpot(TM) Client VM (1.5.0-b64 mixed mode, sharing):

"DestroyJavaVM" prio=1 tid=0xf3b00a68 nid=0x29c3 waiting on condition [0x00000000..0xfeffd260]

"TimerQueue" daemon prio=1 tid=0x083eaa28 nid=0x29d5 in Object.wait() [0x02b80000..0x02b80480]

at java.lang.Object.wait(Native Method)

- waiting on <0xcac5a100> (a javax.swing.TimerQueue)

at javax.swing.TimerQueue.run(TimerQueue.java:233)

- locked <0xcac5a100> (a javax.swing.TimerQueue)

at java.lang.Thread.run(Thread.java:595)

"AWT-EventQueue-0" prio=1 tid=0x083d5b78 nid=0x29ce runnable [0x01323000..0x01324780]

at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:99)

at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:393)

at java.lang.StringBuffer.append(StringBuffer.java:225)

- locked <0xca55ffa8> (a java.lang.StringBuffer)

at Map.toString(Unknown Source)

at TabListCellRenderer.getListCellRendererComponent(Unknown Source)

at javax.swing.plaf.basic.BasicListUI.updateLayoutState(BasicListUI.java:1134)

at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(BasicListUI.java:1084)

at javax.swing.plaf.basic.BasicListUI$Handler.valueChanged(BasicListUI.java:2200)

at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:187)

at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)

at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:214)

at javax.swing.DefaultListSelectionModel.insertIndexInterval(DefaultListSelectionModel.java:566)

at javax.swing.plaf.basic.BasicListUI$Handler.intervalAdded(BasicListUI.java:2158)

at javax.swing.AbstractListModel.fireIntervalAdded(AbstractListModel.java:130)

at javax.swing.DefaultListModel.addElement(DefaultListModel.java:348)

at BLS_ES202.UpdateCodeList(Unknown Source)

at BLS_ES202.NAICSFilterComboBoxActionPerformed(Unknown Source)

at BLS_ES202.access$500(Unknown Source)

at BLS_ES202$6.actionPerformed(Unknown Source)

at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1197)

at javax.swing.JComboBox.contentsChanged(JComboBox.java:1268)

at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:100)

at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:88)

at javax.swing.DefaultComboBoxModel.removeElementAt(DefaultComboBoxModel.java:140)

at javax.swing.DefaultComboBoxModel.removeElement(DefaultComboBoxModel.java:156)

at javax.swing.JComboBox.removeItem(JComboBox.java:718)

at com.heterodyne.gui.MemComboBox.add(Unknown Source)

at BLS_ES202.BtnSelectCodeActionPerformed(Unknown Source)

at BLS_ES202.access$700(Unknown Source)

at BLS_ES202$8.actionPerformed(Unknown Source)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)

at java.awt.Component.processMouseEvent(Component.java:5488)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)

at java.awt.Component.processEvent(Component.java:5253)

at java.awt.Container.processEvent(Container.java:1966)

at java.awt.Component.dispatchEventImpl(Component.java:3955)

at java.awt.Container.dispatchEventImpl(Container.java:2024)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)

at java.awt.Container.dispatchEventImpl(Container.java:2010)

at java.awt.Window.dispatchEventImpl(Window.java:1766)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

"AWT-Shutdown" prio=1 tid=0x083cfd48 nid=0x29cd in Object.wait() [0x017f3000..0x017f3700]

at java.lang.Object.wait(Native Method)

- waiting on <0xcaa026d8> (a java.lang.Object)

at java.lang.Object.wait(Object.java:474)

at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:259)

- locked <0xcaa026d8> (a java.lang.Object)

at java.lang.Thread.run(Thread.java:595)

"AWT-XAWT" daemon prio=1 tid=0x083c7418 nid=0x29cc runnable [0x04681000..0x04681680]

at sun.awt.X11.XToolkit.waitForEvents(Native Method)

at sun.awt.X11.XToolkit.run(XToolkit.java:463)

at sun.awt.X11.XToolkit.run(XToolkit.java:438)

at java.lang.Thread.run(Thread.java:595)

"Java2D Disposer" daemon prio=1 tid=0x083bb430 nid=0x29cb in Object.wait() [0x03f60000..0x03f60600]

at java.lang.Object.wait(Native Method)

- waiting on <0xcaa027f8> (a java.lang.ref.ReferenceQueue$Lock)

at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)

- locked <0xcaa027f8> (a java.lang.ref.ReferenceQueue$Lock)

at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)

at sun.java2d.Disposer.run(Disposer.java:107)

at java.lang.Thread.run(Thread.java:595)

"Low Memory Detector" daemon prio=1 tid=0x080a0790 nid=0x29c9 runnable [0x00000000..0x00000000]

"CompilerThread0" daemon prio=1 tid=0x0809f2e0 nid=0x29c8 waiting on condition [0x00000000..0x00531e68]

"Signal Dispatcher" daemon prio=1 tid=0x0809e2c0 nid=0x29c7 waiting on condition [0x00000000..0x00000000]

"Finalizer" daemon prio=1 tid=0x0809a690 nid=0x29c6 in Object.wait() [0x00406000..0x00406780]

at java.lang.Object.wait(Native Method)

- waiting on <0xca9db230> (a java.lang.ref.ReferenceQueue$Lock)

at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)

- locked <0xca9db230> (a java.lang.ref.ReferenceQueue$Lock)

at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)

at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=1 tid=0x080987d0 nid=0x29c5 in Object.wait() [0x00311000..0x00311700]

at java.lang.Object.wait(Native Method)

- waiting on <0xca9db2b0> (a java.lang.ref.Reference$Lock)

at java.lang.Object.wait(Object.java:474)

at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)

- locked <0xca9db2b0> (a java.lang.ref.Reference$Lock)

"VM Thread" prio=1 tid=0x08095d10 nid=0x29c4 runnable

"VM Periodic Task Thread" prio=1 tid=0x080a1cf8 nid=0x29ca waiting on condition

[8061 byte] By [michael-k] at [2007-9-30 20:48:49]
# 1

I've extracted the minimal code that shows this problem...

You need to include AbsoluteLayout.jar in the classpath

/*

* Test code to show anomaly between Java1.5 and Java1.4

* Select the first 5 elements then press "In" to move the elements to the right box.

* Then press "out" to return them.

* On 1.4 it happens instantaneously, on 1.5 it takes > 10 seconds !!!

*/

import java.awt.*;

import java.util.*;

import javax.swing.*;

public class ES202_GUI extends javax.swing.JFrame {

public ES202_GUI() {

initComponents();

vCodeVector= new Vector ();

LoadTestVector ( vCodeVector );

UpdateCodeList( );

}

private void initComponents() {

java.awt.GridBagConstraints gridBagConstraints;

IndustryPanel = new javax.swing.JPanel();

jScrollPane2 = new javax.swing.JScrollPane();

CodeSelect = new javax.swing.JList();

jScrollPane1 = new javax.swing.JScrollPane();

CodePool = new javax.swing.JList();

BtnDeselectCode = new javax.swing.JButton();

BtnSelectCode = new javax.swing.JButton();

getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.X_AXIS));

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

IndustryPanel.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

IndustryPanel.setBorder(new javax.swing.border.TitledBorder(""));

CodeSelect.setFont(new java.awt.Font("Default", 0, 12));

CodeSelect.setModel(new DefaultListModel());

jScrollPane2.setViewportView(CodeSelect);

IndustryPanel.add(jScrollPane2, new org.netbeans.lib.awtextra.AbsoluteConstraints(420, 40, 350, 150));

CodePool.setFont(new java.awt.Font("Default", 0, 12));

CodePool.setModel(new DefaultListModel());

jScrollPane1.setViewportView(CodePool);

IndustryPanel.add(jScrollPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 40, 350, 150));

BtnDeselectCode.setText("Out");

BtnDeselectCode.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

BtnDeselectCodeActionPerformed(evt);

}

});

IndustryPanel.add(BtnDeselectCode, new org.netbeans.lib.awtextra.AbsoluteConstraints(360, 90, 60, 30));

BtnSelectCode.setForeground(new java.awt.Color(0, 0, 128));

BtnSelectCode.setText("In");

BtnSelectCode.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

BtnSelectCodeActionPerformed(evt);

}

});

IndustryPanel.add(BtnSelectCode, new org.netbeans.lib.awtextra.AbsoluteConstraints(360, 40, 60, 30));

getContentPane().add(IndustryPanel);

pack();

}

private void BtnDeselectCodeActionPerformed(java.awt.event.ActionEvent evt) {

int Selections[] = CodeSelect.getSelectedIndices();

MapNext;

if ( Selections.length > 0 )

for( int i = 0; i < Selections.length; i++ ) {

Next = (Map)CodeSelect.getModel().getElementAt(Selections[i]);

((Map)vCodeVector.get( Next.VectorIndex )).bSelected = false;

}

else

for(int i = 0; i < CodeSelect.getModel().getSize(); i++) {

Next = (Map)CodeSelect.getModel().getElementAt(i);

((Map)vCodeVector.get(Next.VectorIndex)).bSelected = false;

}

if ( Selections.length > 0 )

for( int i = Selections.length-1; i >= 0 ; i-- ) {

((DefaultListModel)CodeSelect.getModel()).removeElementAt(Selections[i]);

}

else

((DefaultListModel)CodeSelect.getModel()).removeAllElements();

UpdateCodeList();

}

private void BtnSelectCodeActionPerformed(java.awt.event.ActionEvent evt) {

int Selections[]= CodePool.getSelectedIndices();

Map Next;

if ( Selections.length > 0 )

for( int i = 0; i < Selections.length; i++ ) {

Next = (Map)CodePool.getModel().getElementAt(Selections[i]);

((DefaultListModel)CodeSelect.getModel()).addElement( Next );

((Map)vCodeVector.get( Next.VectorIndex )).bSelected = true;

}

else/* If we are transferring everything */

for(int i = 0; i < CodePool.getModel().getSize(); i++) {

Next = (Map)CodePool.getModel().getElementAt(i);

((DefaultListModel)CodeSelect.getModel()).addElement( Next );

((Map)vCodeVector.get(Next.VectorIndex)).bSelected = true;

}

if ( Selections.length > 0 )

for( int i = Selections.length-1; i >= 0 ; i-- ) {

((DefaultListModel)CodePool.getModel()).removeElementAt(Selections[i]);

}

else

((DefaultListModel)CodePool.getModel()).removeAllElements();

}

/********************** Main Main Main Main Main

* @param args the command line arguments

*/

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new ES202_GUI().setVisible(true);

}

});

}

// Update the NAICS Pool ListB

private void UpdateCodeList() {

Map Next;

((DefaultListModel)CodePool.getModel()).clear();

for(int i=0; i < vCodeVector.size(); i++ ) {

Next = (Map)(vCodeVector.get(i));

((DefaultListModel)CodePool.getModel()).addElement( Next );

}

}

private void LoadTestVector( Vector vTestVector ) {

Map record;

int index = 0;

for( int j=0; j < 2000; j++ ) {

record = new Map();

record.Code= new Integer( j );

record.bDisplay = true; record.bSelected = false;

record.VectorIndex = j;

vCodeVector.add( record );

}

}

private Vector <Map> vCodeVector;

// Variables declaration - do not modify

private javax.swing.JButton BtnDeselectCode;

private javax.swing.JButton BtnSelectCode;

private javax.swing.JList CodePool;

private javax.swing.JList CodeSelect;

private javax.swing.JPanel IndustryPanel;

private javax.swing.JScrollPane jScrollPane1;

private javax.swing.JScrollPane jScrollPane2;

// End of variables declaration

}

class Map {

boolean bDisplay, bSelected;

intCode, VectorIndex;

public String toString() {

return( String.format("%s", Code) );

}

}

michael-k at 2007-7-7 2:21:53 > top of Java-index,Administration Tools,Sun Connection...