-
Bug
-
Resolution: Fixed
-
P3
-
7, 8, 9
-
b68
-
x86_64
-
windows_7
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8098720 | emb-9 | Sergey Bylokhov | P3 | Resolved | Fixed | team |
JDK-8129157 | 8u65 | Sergey Bylokhov | P3 | Resolved | Fixed | b02 |
JDK-8073871 | 8u60 | Sergey Bylokhov | P3 | Resolved | Fixed | b20 |
JDK-8138247 | emb-8u65 | Unassigned | P3 | Resolved | Fixed | b02 |
JDK-8129681 | emb-8u60 | Sergey Bylokhov | P3 | Resolved | Fixed | b20 |
FULL PRODUCT VERSION :
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
FULL OS VERSION :
Microsoft Windows [Sürüm 6.1.7601]
A DESCRIPTION OF THE PROBLEM :
multiple setEnable() method calls cause poor GUI performance and visibly slowness. But Actual problem caused by updateCursorImmediately() method call. If the component count is huge at a container In Java 1.6.0_45 method call result in under 1 second but in Java 1.8.0_25 It result in nearly 6 second. Users are unsatistied by this situation. And We have couldn't migrate from 1.6 to 1.8.
THE PROBLEM WAS REPRODUCIBLE WITH -Xint FLAG: Did not try
THE PROBLEM WAS REPRODUCIBLE WITH -server FLAG: Did not try
REGRESSION. Last worked in version 6u45
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
You can use the sample code the reproduce the performance problem
EXPECTED VERSUS ACTUAL BEHAVIOR :
Expected Result is that process of Disabling 1000 JButton is under 1 second.
Actual Result is that It's lasting 6 second.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
There is no error message.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class TestGUI extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
public TestGUI() {
initGUI();
}
public void actionPerformed(ActionEvent e) {
String text;
if(e.getActionCommand().equals("Enable-ALL")){
enableAll();
text= "Disable-ALL";
}
else{
disableAll();
text= "Enable-ALL";
}
((JButton)e.getSource()).setText(text);
((JButton)e.getSource()).setEnabled(true);
}
private void initGUI() {
long m = System.currentTimeMillis();
System.out.println("Initializing GUI");
setTitle(System.getProperty("java.vendor") + " " + System.getProperty("java.version"));
setLayout(new FlowLayout());
JButton b = new JButton("Disable-ALL ");
b.addActionListener(this);
add(b);
for (int i = 1; i < 10001; i++) {
b = new JButton("Button " + i);
add(b);
}
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600, 600);
setVisible(true);
m = System.currentTimeMillis() - m;
System.out.println("GUI initialized in " + m + " ms");
}
private void disableAll() {
long m = System.currentTimeMillis();
System.out.println("Disabling");
for (Component c : getContentPane().getComponents()) {
c.setEnabled(false);
}
m = System.currentTimeMillis() - m;
System.out.println("Disabled in " + m + " ms");
}
private void enableAll() {
long m = System.currentTimeMillis();
System.out.println("Enabling");
for (Component c : getContentPane().getComponents()) {
c.setEnabled(true);
invalidate();
}
m = System.currentTimeMillis() - m;
System.out.println("Enabled in " + m + " ms");
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
System.out.println(System.getProperty("java.vendor") + " "
+ System.getProperty("java.version"));
new TestGUI();
}
});
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
I have no workaround.
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
FULL OS VERSION :
Microsoft Windows [Sürüm 6.1.7601]
A DESCRIPTION OF THE PROBLEM :
multiple setEnable() method calls cause poor GUI performance and visibly slowness. But Actual problem caused by updateCursorImmediately() method call. If the component count is huge at a container In Java 1.6.0_45 method call result in under 1 second but in Java 1.8.0_25 It result in nearly 6 second. Users are unsatistied by this situation. And We have couldn't migrate from 1.6 to 1.8.
THE PROBLEM WAS REPRODUCIBLE WITH -Xint FLAG: Did not try
THE PROBLEM WAS REPRODUCIBLE WITH -server FLAG: Did not try
REGRESSION. Last worked in version 6u45
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
You can use the sample code the reproduce the performance problem
EXPECTED VERSUS ACTUAL BEHAVIOR :
Expected Result is that process of Disabling 1000 JButton is under 1 second.
Actual Result is that It's lasting 6 second.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
There is no error message.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class TestGUI extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
public TestGUI() {
initGUI();
}
public void actionPerformed(ActionEvent e) {
String text;
if(e.getActionCommand().equals("Enable-ALL")){
enableAll();
text= "Disable-ALL";
}
else{
disableAll();
text= "Enable-ALL";
}
((JButton)e.getSource()).setText(text);
((JButton)e.getSource()).setEnabled(true);
}
private void initGUI() {
long m = System.currentTimeMillis();
System.out.println("Initializing GUI");
setTitle(System.getProperty("java.vendor") + " " + System.getProperty("java.version"));
setLayout(new FlowLayout());
JButton b = new JButton("Disable-ALL ");
b.addActionListener(this);
add(b);
for (int i = 1; i < 10001; i++) {
b = new JButton("Button " + i);
add(b);
}
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600, 600);
setVisible(true);
m = System.currentTimeMillis() - m;
System.out.println("GUI initialized in " + m + " ms");
}
private void disableAll() {
long m = System.currentTimeMillis();
System.out.println("Disabling");
for (Component c : getContentPane().getComponents()) {
c.setEnabled(false);
}
m = System.currentTimeMillis() - m;
System.out.println("Disabled in " + m + " ms");
}
private void enableAll() {
long m = System.currentTimeMillis();
System.out.println("Enabling");
for (Component c : getContentPane().getComponents()) {
c.setEnabled(true);
invalidate();
}
m = System.currentTimeMillis() - m;
System.out.println("Enabled in " + m + " ms");
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
System.out.println(System.getProperty("java.vendor") + " "
+ System.getProperty("java.version"));
new TestGUI();
}
});
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
I have no workaround.
- backported by
-
JDK-8073871 GUI perfomance are very slow compared java 1.6.0_45
-
- Resolved
-
-
JDK-8098720 GUI perfomance are very slow compared java 1.6.0_45
-
- Resolved
-
-
JDK-8129157 GUI perfomance are very slow compared java 1.6.0_45
-
- Resolved
-
-
JDK-8129681 GUI perfomance are very slow compared java 1.6.0_45
-
- Resolved
-
-
JDK-8138247 GUI perfomance are very slow compared java 1.6.0_45
-
- Resolved
-