DevX Home    Today's Headlines   Articles Archive   Tip Bank   Forums   

+ Reply to Thread
Results 1 to 2 of 2
  1. #1
    Join Date
    Jan 2005
    Posts
    3

    Memory problem while printing png images

    I am using the following program for printing png images (large images 300 dpi to 600 dpi). But its taking a lot of memory after printing some images and program is exiting with "You have less virtual memory " , "Unable to allocate memory"....

    here is my print method
    Code:
    public int print (Graphics g, PageFormat pageFormat, int page){
    try{
    
    if(page >= totalPages)
    return NO_SUCH_PAGE;
    
    if(currentPage < 0 || currentPage != page){
    image=null;
    scale = -1;
    System.gc();
    setImage(page);}
    
    Graphics2D g2d = (Graphics2D) g;
    if(image != null){
    double imageableWidth=pageFormat.getImageableWidth();
    double imageableHeight=pageFormat.getImageableHeight();
    double imageableX=pageFormat.getImageableX();
    double imageableY=pageFormat.getImageableY();
    
    if(scale < 0)
    scale = Math.min(imageableWidth/width,imageableHeight/height);
    g2d.translate(imageableX,imageableY);
    
    if(scale<=1) { g2d.scale(scale,scale);}
    
    if(height > 600) { divFactor = height / 600 ;}
    
    newHeight = height/divFactor;
    
    while(count<=divFactor){
    BufferedImage im = image.getSubimage(0,y,width,newHeight);
    g2d.drawImage(im,0,y,null);
    im.flush();
    im = null;
    count++;
    y += newHeight;
    }
    count = 1;
    y = 0;
    newHeight = 0;
    divFactor = 1;
    image.flush();
    scale = -1;
    }
    else
    System.out.println("Printing Error for page "+page);
    
    g2d.dispose();
    g2d = null;
    g.dispose();
    g = null;
    currentPage = page;
    
    }catch(OutOfMemoryError err)
    {
    System.out.println("OutOfMemoryError in Print: " + err);
    return NO_SUCH_PAGE;
    }
    catch(Exception e){
    System.out.println("(print ) ERROR: " + e);
    return NO_SUCH_PAGE;
    }
    return Printable.PAGE_EXISTS;
    }
    
    and setImage method :
    public void setImage(int pathcount) throws OutOfMemoryError {
    try{
    URL url = new URL(paths[pathcount]);
    InputStream in = url.openStream();
    
    //ImageInputStream imin = ImageIO.createImageInputStream(new BufferedInputStream(in));
    ImageInputStream imin = ImageIO.createImageInputStream(in);
    
    Iterator readers = ImageIO.getImageReaders(imin);
    
    if (!readers.hasNext())
    throw new IOException("No readers");
    
    ImageReader reader = (ImageReader) readers.next();
    reader.setInput(imin);
    width = reader.getWidth(0);
    height = reader.getHeight(0);
    image = reader.read(0);
    reader.abort();
    reader.dispose();
    reader = null;
    readers = null;
    image.flush();
    imin = null;
    in = null;
    url = null;
    }catch(OutOfMemoryError err)
    { System.out.println("OutOfMemoryError in Reading: " + err);
    image = null;
    }
    catch(Exception e){
    System.out.println("Error: " + e);
    e.printStackTrace();
    image = null;
    }
    }
    
    paths is a global string array which contains png image urls and initial value of currentPage is -1 which used to call setImage only once per image
    After printing some images memory usage increasing (using task manager->performance->PF Usage) a lot. I have 256MB RAM at first PF usage is begining at 150MB and increasing upto 610MB, at this point application is exiting. What i think is java objects are not garbage collecting and memory usage is increaing. Whats wrong i am doing here , How can i reduce the memory usage?

  2. #2
    Join Date
    Sep 2005
    Location
    istanbul / Turkey
    Posts
    133
    -you may free system resources ( Graphics )
    where you explicitly got it .
    ( i guess the scope , you called print(..) )
    this will make it simple to track them.

    -no need to use System.gc() function , becos it will work
    when its required, it can not recovery any problem calling directly.

Similar Threads

  1. CMR problem
    By vikassheelgupta in forum Java
    Replies: 0
    Last Post: 07-22-2005, 05:35 AM
  2. Replies: 0
    Last Post: 10-29-2001, 01:55 PM
  3. loading images dynamically is slow
    By Michael Shutt in forum Web
    Replies: 0
    Last Post: 06-26-2001, 02:25 PM
  4. problem with data islands and images
    By Michael Shutt in forum XML
    Replies: 0
    Last Post: 06-26-2001, 11:51 AM
  5. XML - OUT OF MEMORY
    By Rajesh in forum XML
    Replies: 0
    Last Post: 11-13-2000, 01:23 AM

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
HTML5 Development Center
 
 
FAQ
Latest Articles
Java
.NET
XML
Database
Enterprise
Questions? Contact us.
C++
Web Development
Wireless
Latest Tips
Open Source


Top DevX Stories

Easy Web Services with SQL Server 2005 HTTP Endpoints
JavaOne 2005: Java Platform Roadmap Focuses on Ease of Development, Sun Focuses on the "Free" in F.O.S.S.
Wed Yourself to UML with the Power of Associations
Microsoft to Add AJAX Capabilities to ASP.NET
IBM's Cloudscape Versus MySQL


Sponsored Links