8010309 : PlatformLogger: isLoggable performance / waste due to HashMap<Integer, Level> leads to Integer allocations (boxing)

Laurent Bourgès bourges.laurent at gmail.com
Fri Mar 22 09:05:51 UTC 2013


Hi Mandy & Peter,

Here is an update patch applying mandy's suggestions:
http://jmmc.fr/~bourgesl/share/webrev-2-8010309/

Good work and I like the solution.
>
Thanks.


>  JavaLogger and LoggerProxy are only used from within PlatformLogger.
> Wouldn't it be better to declare them private? Their usage (one or the
> other) depends on the 'loggingSupport' flag that is initialized with
> PlatformLogger class. Usage of JavaLogger or LoggerProxy outside
> PlatformLogger would be wrong, I think.
>
>
> Yes JavaLogger and LoggerProxy classes can be made private.
>

Done.

 I looked at it but not in great detail.  In general it's very good clean
> up.   The comment in line 124-132 is good information and since the code is
> evolving, I would suggest to take those count out.
>

Fixed.


> valueOf is one common method name to find an instance of a given value.
> Perhaps LevelEnum.forValue can be renamed to LevelEnum.valueOf(int)?
>

Done.


> It seems to be useful to add a static method LevelEnum.getLevel(int) to
> replace the calls to "LevelEnum.forValue(newLevel).julLevel".
>

I agree I prefer using methods (field encapsulation) so I added:

+        /**
+         * java.util.logging.Level optionally initialized in
JavaLogger's static initializer
+         * and USED ONLY IN JavaLogger (only once java.util.logging
is available and enabled)
+         */
+        private Object julLevel;
+
+        void setJulLevel(Object julLevel) {
+            this.julLevel = julLevel;
+        }
+
+        Object getJulLevel() {
+            return this.julLevel;
+        }
+
+        /**
+         * Return the java.util.logging.Level used only in JavaLogger
+         * @param levelValue PlatformLogger level as int
+         * @return java.util.logging.Level or null if
java.util.logging is not available and disabled
+         */
+        static Object getJulLevel(int levelValue) {
+            return valueOf(levelValue).getJulLevel();
+        }

The tests are in jdk/test/java/util/logging and jdk/test/sun/util/logging.
> It'd be good to check if you want to extend
> jdk/test/sun/util/logging/PlatformLoggerTest.java to cover all levels (it's
> currently already checking several).
>

I will now have a look ...

Regards,
Laurent



More information about the core-libs-dev mailing list