garbage collection take too much time to execute....

- - decuplo@yahoo.com
Tue Jun 17 15:23:00 GMT 2008


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 



      
-------------- next part --------------
A non-text attachment was scrubbed...
Name: snippet.java
Type: text/x-java
Size: 3391 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/java/attachments/20080617/e410aa62/attachment.bin>


More information about the Java mailing list