<AWT Dev> sun.awt.X11 logs still using String + (waste)

Anthony Petrov anthony.petrov at oracle.com
Mon Mar 18 06:44:38 PDT 2013


Hi Laurent,

Normally we fix an issue in JDK 8 first, and then back-port the fix to a 
7u release. You're saying that in JDK 8 the problem isn't reproducible 
anymore. Can you please investigate (using the Mercurial history log) 
what exact fix resolved it in JDK 8?

--
best regards,
Anthony

On 03/18/13 15:09, Laurent Bourgès wrote:
> Dear all,
>
> I run recently netbeans profiler on my swing application (Aspro2:
> http://www.jmmc.fr/aspro) under linux x64 platform and I figured out
> that a lot of char[] instances are coming from String + operator called
> by sun.awt.X11 code.
>
> I looked at PlatformLogger source code but found not way to disable it
> completely: maybe an empty logger implementation could be interesting to
> be used during profiling or normal use (not debugging).
> Apparently JDK8 provides some patchs to avoid String creation when the
> logger is disabled (level).
>
> However, I looked also to the sun.awt code (jdk7u repository) to see the
> origin of the string allocations:
> XDecoratedPeer:
>      public void handleFocusEvent(XEvent xev) {
> ...
> *        focusLog.finer("Received focus event on shell: " + xfe);
> *   }
>
>      public boolean requestWindowFocus(long time, boolean timeProvided) {
> ...
> *            focusLog.finest("Real native focused window: " +
> realNativeFocusedWindow +
> "\nKFM's focused window: " + focusedWindow);
> *...
> *        focusLog.fine("Requesting focus to " + (this == toFocus ? "this
> window" : toFocus));
> *...
> }
>
> XBaseWindow:
>      public void xSetBounds(int x, int y, int width, int height) {
> ...
> *        insLog.fine("Setting bounds on " + this + " to (" + x + ", " +
> y + "), " + width + "x" + height);
> *}
>
> XNetProtocol:
>      boolean doStateProtocol() {
> ...
> *        stateLog.finer("doStateProtocol() returns " + res);
> *}
>
> XSystemTrayPeer:
>      XSystemTrayPeer(SystemTray target) {
> ...
> *        log.fine(" check if system tray is available. selection owner:
> " + selection_owner);
> *}
>      void addTrayIcon(XTrayIconPeer tiPeer) throws AWTException {
> ...
> *        log.fine(" send SYSTEM_TRAY_REQUEST_DOCK message to owner: " +
> selection_owner);
> *}
>
> XFramePeer:
>      public void handlePropertyNotify(XEvent xev) {
> ...
>              stateLog.finer("State is the same: " + state);
> }
>
> However I only give here few cases but certainly others are still
> present in the source code; maybe findbugs or netbeans warnings could
> help you finding all of them.
>
> I advocate the amount of waste (GC) is not very important but String
> conversion are also calling several toString() methods that can be
> costly (event, Frame, window ...)
>
> Finally, I ran few grep commands on the sun.awt.X11 code (jdk7u) and you
> can look at them to see all string + operations related to log statements.
>
> PS: I may help fixing the source code but I have no idea how to
> collaborate (provide a patch ?)
>
> Regards,
> Laurent Bourgès



More information about the awt-dev mailing list