Hi, IE8 is known for memory leaks with images (resizing, etc.) example: http://stackoverflow.com/questions/803150/can-someone-verify-that-this-is-an-ie8-memory-leak
didier On Nov 1, 7:06 pm, hermis <[email protected]> wrote: > Hello, > > I have written a simple application which fills a FlexTable with a set > of images. There is a timer which updates the URL of each image every > second. The URL points to a Servlet which in turn generates a random > PNG image on its doGet() method and writes it to the response output > stream. The servlet sets the "Cache-Control" header to "No-Cache". > > When I run the webapp in IE7 / 8 the memory gradually increases. > Leaving it overnight can get it close to 1Gb. > > Here is the client code: > > ################################################################# > > public class LeakyApp implements EntryPoint > { > public static final String IMAGE_SERVLET_NAME = "imageServlet"; > > public void onModuleLoad() > { > leak(); > } > > private void leak() > { > UrlBuilder urlBuilder = createUrlBuilder(); > > final FlexTable table = new FlexTable(); > > final List<Image> lstImages = createAndAddImages(5,10 ,table > ); > > final String strURL = urlBuilder.buildString(); > > final Timer timer = new Timer(){ > > int nCounter = 0; > > @Override > public void run() > { > for (Image img : lstImages) > { > img.setUrl( strURL + "?" + > nCounter++) ; > } > } > }; > > final Button btnStartLeak = new Button("Leak"); > btnStartLeak.addClickHandler( new ClickHandler() > { > @Override > public void onClick(ClickEvent event) > { > RootPanel.get().remove( btnStartLeak ); > RootPanel.get().add( table ); > timer.scheduleRepeating( 1000 ); > } > }); > > RootPanel.get().add( btnStartLeak ); > } > > private List<Image> createAndAddImages(int rowCount, int colCount, > FlexTable table) > { > List<Image> lstImages = new ArrayList<Image>(); > > for(int row = 0; row<rowCount; row++) > { > for(int col = 0; col<colCount; col++) > { > Image image = new Image(); > lstImages.add( image ); > table.setWidget(row, col, image); > } > } > > return lstImages; > } > > private UrlBuilder createUrlBuilder() > { > UrlBuilder urlBuilder = null; > > if( GWT.isScript() ) > { > urlBuilder = new UrlBuilder(); > urlBuilder.setHost( Window.Location.getHost() ); > urlBuilder.setPath( Window.Location.getPath() + > IMAGE_SERVLET_NAME ); > } > else > { > urlBuilder = Window.Location.createUrlBuilder(); > urlBuilder.setPath( IMAGE_SERVLET_NAME ); > } > > return urlBuilder; > } > > } > > ############################################################ > > Here is the servlet code: > > ############################################################ > > public class ImageServlet extends HttpServlet > { > private int nCounter = 0; > private Font font = new Font("Tahoma", Font.BOLD, 10); > > private static Color getRandomColor() > { > int r = (int)(Math.random()* 255); > int g = (int)(Math.random()* 255); > int b = (int)(Math.random()* 255); > > return new Color(r,g,b); > } > > @Override > protected void doGet ( HttpServletRequest request, > HttpServletResponse response ) throws IOException > { > > OutputStream out = response.getOutputStream(); > > response.setContentType("image/png"); > response.addHeader("Pragma", "no-cache"); > response.addHeader("Cache-Control", "no-cache"); > > ImageIO.write( generateRandomImage(), "png", out ); > > out.close(); > } > > private BufferedImage generateRandomImage() > { > return generateRandomImage(80, 80); > } > > private BufferedImage generateRandomImage(int width, int height) > { > BufferedImage image = new BufferedImage(width, height, > BufferedImage.TYPE_INT_ARGB); > > Graphics2D g2d = image.createGraphics(); > g2d.setFont( font ); > g2d.setColor( getRandomColor() ); > g2d.fillRect(0, 0, width, height); > g2d.setColor( Color.WHITE ); > g2d.drawString("" + nCounter, 20, 20); > > System.err.println(" img " + nCounter ); > > nCounter++; > > if( nCounter == Integer.MAX_VALUE ) > nCounter = 0; > > return image; > } > > } > > ############################################################ > > Is there a programming error, or is it the nature of what the > application is doing causing the memory leak? Can anyone explain what > is happening behind the scenes? > > Thanks. -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
