This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
RE: garbage collection take too much time to execute....
- From: "Boehm, Hans" <hans dot boehm at hp dot com>
- To: "decuplo at yahoo dot com" <decuplo at yahoo dot com>, "java at gcc dot gnu dot org" <java at gcc dot gnu dot org>
- Date: Tue, 17 Jun 2008 17:51:45 +0000
- Subject: RE: garbage collection take too much time to execute....
- Accept-language: en-US
- Acceptlanguage: en-US
- References: <760524.64857.qm@web56910.mail.re3.yahoo.com>
Did you try with a recent version of gcj?
In the past, there have been problems with the collector looking for pointers in graphics memory. You can try running the program with the GC_DUMP_REGULARLY environment variable set, and look at the size of the root sets. If it appears to include your graphics memory, then that's probably the issue.
If not, GC_PRINT_STATS output might be helpful.
Hans
> -----Original Message-----
> From: java-owner@gcc.gnu.org [mailto:java-owner@gcc.gnu.org]
> On Behalf Of - -
> Sent: Tuesday, June 17, 2008 8:23 AM
> To: java@gcc.gnu.org
> Cc: decuplo@yahoo.com
> Subject: garbage collection take too much time to execute....
>
>
> Hi,
> I found a strange behaviour on code generated by gcj when
> compare its output with code generated by eclipse.
>
> Mainly the code generated by gcj take too much time to
> perform a memory garbage collection (about 5 seconds)
> instead of only 15 milliseconds of byte code generated by eclipse.
>
> The problem seems to happens when there are canvas and
> transform operations. I attach a simple snippet code that
> write a vertical text on canvas in order to reproduce the behaviour.
>
> The gcj compiler I use is:
> $ gcj --version
> gcj.exe (GCC) 3.4.5 (mingw-vista special r3) Copyright (C)
> 2004 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions.
> There is NO warranty; not even for MERCHANTABILITY or
> FITNESS FOR A PARTICULAR PURPOSE.
>
> with the swt version 3349: "swt-gdip-win32-3349.dll" and
> "swt-win32-3349.dll"
>
> I'm new of this discussion list, hoping not annoy you. It is
> a trouble or it is just a mistake on usage of transform?
> thanks you,
>
> x10
>
> Here is the code....
>
> -------------------------
> import org.eclipse.swt.layout.GridLayout;
> import org.eclipse.swt.graphics.Point;
> import org.eclipse.swt.widgets.Shell;
> import org.eclipse.swt.widgets.Display;
> import org.eclipse.swt.widgets.Button;
> import org.eclipse.swt.SWT;
> import org.eclipse.swt.widgets.Canvas;
> import org.eclipse.swt.layout.GridData;
> import org.eclipse.swt.graphics.GC;
> import org.eclipse.swt.graphics.Transform;
>
> public class snippet {
>
> private Shell sShell = null; //
> @jve:decl-index=0:visual-constraint="10,10"
> private Button button = null;
> private Canvas canvas = null;
>
> /**
> * This method initializes canvas
> *
> */
> private void createCanvas() {
> GridData gridData = new GridData();
> gridData.horizontalAlignment =
> org.eclipse.swt.layout.GridData.FILL;
> gridData.grabExcessHorizontalSpace = true;
> gridData.grabExcessVerticalSpace = true;
> gridData.verticalAlignment =
> org.eclipse.swt.layout.GridData.FILL;
> canvas = new Canvas(sShell, SWT.BORDER);
> canvas.setLayoutData(gridData);
> canvas.addPaintListener(new
> org.eclipse.swt.events.PaintListener() {
> public void
> paintControl(org.eclipse.swt.events.PaintEvent e) {
>
> System.out.println("paintControl()"); // TODO Auto-generated
> Event stub paintControl()
> GC gc = e.gc;
>
> int xVertical = 200;
> int yVertical = 200;
> Transform t = new
> Transform(gc.getDevice());
> t.translate(xVertical, yVertical);
> t.rotate(-90f);
> gc.setTransform(t);
>
> gc.drawText("Vertical Text",0,0);
>
> t.rotate(90f);
> t.translate(-xVertical, -yVertical);
> gc.setTransform(t);
> t.dispose();
>
> }
> });
> }
>
> /**
> * @param args
> */
> public static void main(String[] args) {
> // TODO Auto-generated method stub
> /* Before this is run, be sure to set up the
> launch configuration (Arguments->VM Arguments)
> * for the correct SWT library path in order
> to run with the SWT dlls.
> * The dlls are located in the SWT plugin jar.
> * For example, on Windows the Eclipse SWT
> 3.1 plugin jar is:
> *
> installation_directory\plugins\org.eclipse.swt.win32_3.1.0.jar
> */
> Display display = Display.getDefault();
> snippet thisClass = new snippet();
> thisClass.createSShell();
> thisClass.sShell.open();
>
> while (!thisClass.sShell.isDisposed()) {
> if (!display.readAndDispatch())
> display.sleep();
> }
> display.dispose();
> }
>
> /**
> * This method initializes sShell
> */
> private void createSShell() {
> GridData gridData1 = new GridData();
> gridData1.horizontalAlignment =
> org.eclipse.swt.layout.GridData.CENTER;
> sShell = new Shell();
> sShell.setText("Shell");
> sShell.setSize(new Point(579, 365));
> sShell.setLayout(new GridLayout());
> button = new Button(sShell, SWT.NONE);
> button.setText("Press me to redraw the canvas");
> button.setLayoutData(gridData1);
> button.addSelectionListener(new
> org.eclipse.swt.events.SelectionAdapter() {
> public void
> widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
>
> System.out.println("widgetSelected()"); // TODO
> Auto-generated Event stub widgetSelected()
>
> canvas.redraw();
> System.err.println("start");
> long before =
> System.currentTimeMillis();
> System.gc();
> long after =
> System.currentTimeMillis();
> System.err.println("Elapsed
> milliseconds: " + (after-before));
> System.err.println("end");
> }
> });
> createCanvas();
> }
>
> }
> ----------------------------
>
>
>
>
>
>
>
>
>
>
> The java code attached is
>
>
>
>