[GCJ] Performance of GUI applications on embedded systems

ffileppo ffileppo@libero.it
Fri Nov 7 11:04:00 GMT 2008


> >> Here's one improvement. If you can get rid of the places in the GTK peers
> >> where class and method lookups are performed at runtime you'll probably
> >> have a fix. This shouldn't be a massive amount of work, just rather
> >> boring.
> >>
> >> In gcj,
> >>
> >> * Compiled java code is quite fast.
> >> * Class lookup by name is slow.
> >> * Calling JNI code from compiled java code is quite fast.
> >> * Calling compiled java code from JNI code is slow.
> >> * Exceptions are slow.
>> > I'm testing your patch on my embedded system and now I can see that GUI performance are very much better (particularly during application startup).
> >
> > Thank you so much!
> >
> > However running my test case (please see my first post) I see that CPU usage is always at 100% (after the application is running),
> > so the responsiveness is still not very good.
>> What do you expect? You're setting up a Timer with a delay of
> 0 milliseconds between events, and it's running continuously.
>> Andrew.
>
You're right.
However I'm experiencing slowness when testing some other GUI sample application (e.g. the test case attached at the end).
In this particular test case, the application takes a lot of time to startup (compared to the same device, running WinCE and CrEme JVM) and during start up the CPU usage is always at 100%.
After startup, I'v also noticed that highlighting and/or clicking a certain number of times on buttons cause the application to hang and after that the CPU usage is always 100%.
I'm still trying to get oprofile working on my target device to see what's going wrong.
Thank you,
Francesco
Test case:
import javax.swing.JComponent;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
public class GUITest {
 public static void main(String[] args) {
 JFrame frame = new JFrame();
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 JComponent newContentPane = new TestUI();
 frame.setTitle("TestUI");
 newContentPane.setOpaque(true);
 frame.setContentPane(newContentPane);
 frame.setBounds(10, 10, 500, 400);
 frame.setVisible(true);
 }
 static class TestUI extends JPanel {
 long startTime;
 JPanel createPanel(int start) {
 JPanel p = new JPanel();
 p.setLayout(null);
 for (int i=0; i<100; i++) {
 JButton ltit = new JButton("Variable "+(i+start)+": ");
 long val = System.currentTimeMillis() - startTime;
 JButton lval = new JButton(""+val);
 ltit.setBounds(5, 10+20*i, 150, 15);
 lval.setBounds(200, 10+20*i, 150, 15);
 p.add(ltit);
 p.add(lval);
 }
 return p;
 }
 TestUI() {
 super(new BorderLayout());
 startTime = System.currentTimeMillis();
 JTabbedPane p = new JTabbedPane();
 for (int i=0; i<10; i++) {
 JPanel page1 = createPanel(i*100+1);
 p.add("P"+i, page1);
 }
 add(p, BorderLayout.CENTER);
 }
 }
}


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /