Strange behaviour in DeferredCompletionFailureHandler

Dmitry Batkovich dmitry.batkovich at jetbrains.com
Mon Nov 12 15:10:57 UTC 2018


Hi all,

I've faced with javac 11 performance problem
in DeferredCompletionFailureHandler. I have a project with google dagger
dependency injection and with some javac task listener (You may see
https://youtrack.jetbrains.com/issue/IDEA-201978). In this case I see lots
FlipSymbolDescription#flip() traces in compiler profile snapshot. I've
tried to investigate the problem by myself and found next things:

1)
Map com.sun.tools.javac.code.DeferredCompletionFailureHandler.Handler#class2Flip
produces memory leaks because keys of the map are present as a part of
value object. So, keys are always strongly referenced. And usage of
WeakHashMap is useless here.

2) com.sun.tools.javac.code.DeferredCompletionFailureHandler.Handler#class2Flip
does nothing. Any information inside FlipSymbolDescription is never used
(DefferedCompleter is never used).

3) Handler.install/uninstall method usages (see setHandler() usages in
MultiTaskListener) produces lots of odd cycles where we have only field
reassignment. Sure we need at least one TaskListener here.

So, I've found that fix for https://bugs.openjdk.java.net/browse/JDK-8187950
is very dirty in point view of compiler performance. And I don't understand
what's the purpose of class2Flip map introduction. Could you clarify, help
me, please?

Cheers,
Dmitrii Batkovich
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20181112/dbc36250/attachment.html>


More information about the compiler-dev mailing list