changeset 538:59aa6b578cf0

6661861: Decrease memory use of Inflaters by ZipFile Summary: Fix allows release of native resources earlier than without fix Reviewed-by: alanb
author bristor
date Mon, 08 Sep 2008 13:44:32 -0700
parents 71a5f3f55b9c
children 334efd173b8f
files src/share/classes/java/util/zip/Inflater.java src/share/classes/java/util/zip/ZipFile.java
diffstat 2 files changed, 7 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/java/util/zip/Inflater.java	Thu Sep 04 14:55:12 2008 -0700
+++ b/src/share/classes/java/util/zip/Inflater.java	Mon Sep 08 13:44:32 2008 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright 1996-2006 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -73,11 +73,13 @@
 public
 class Inflater {
     private long strm;
-    private byte[] buf = new byte[0];
+    private byte[] buf = defaultBuf;
     private int off, len;
     private boolean finished;
     private boolean needDict;
 
+    private static final byte[] defaultBuf = new byte[0];
+
     static {
         /* Zip library is loaded from System.initializeSystemClass */
         initIDs();
@@ -318,6 +320,7 @@
     public synchronized void reset() {
         ensureOpen();
         reset(strm);
+        buf = defaultBuf;
         finished = false;
         needDict = false;
         off = len = 0;
--- a/src/share/classes/java/util/zip/ZipFile.java	Thu Sep 04 14:55:12 2008 -0700
+++ b/src/share/classes/java/util/zip/ZipFile.java	Mon Sep 08 13:44:32 2008 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright 1995-2006 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1995-2008 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -278,7 +278,6 @@
             int size = inflaters.size();
             if (size > 0) {
                 Inflater inf = (Inflater)inflaters.remove(size - 1);
-                inf.reset();
                 return inf;
             } else {
                 return new Inflater(true);
@@ -291,6 +290,7 @@
      */
     private void releaseInflater(Inflater inf) {
         synchronized (inflaters) {
+            inf.reset();
             inflaters.add(inf);
         }
     }