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.

Reply via email to