[9] RFR(M): 8129847: Compiling methods generated by Nashorn triggers high memory usage in C2

Zoltán Majó zoltan.majo at oracle.com
Fri Nov 27 13:13:42 UTC 2015


Hi Aleksey,


On 11/26/2015 02:54 PM, Aleksey Shipilev wrote:
> Hi Zoltan,
>
> This is a very interesting approach indeed!

thank you for the feedback and suggestions!

>
> On 11/25/2015 05:57 PM, Zoltán Majó wrote:
>> [9]: http://cr.openjdk.java.net/~zmajo/8129847-9/webrev.04/
> I have a few specific comments:
>
> a) The interaction between Remove_Useless and Renumber_Live is unclear
> from the code like this:
>
>    47     Remove_Useless,             // Remove useless nodes
>    48     Renumber_Live,              // First, remove useless nodes from
> the graph. Then, renumber live nodes.
>
> It seems that Renumber_Live completely subsumes the Remove_Useless?
> Maybe a better name would be Remove_Useless_And_Renumber to capture
> that? Or the inclination is that Remove_Useless is a cleanup action that
> runs multiple times anyway? If so, there seem to be no reason to mention
> it in the phase description.

Remove_Useless can (and is) performed independently of Renumber_Live. 
But Renumber_Live performs a Remove_Useless before renumbering. To make 
that clearer, I updated the constant's name to 
Remove_Useless_And_Renumber, as you suggested.

>
> b) Can you add the compilation time counters: TracePhase, &timers, etc.,
> so that a new phase time is visible in -XX:+CITime?

Good idea, I added the compilation time counters.

>
> c) Does this renumbering break Ideal Graph Visualizer, i.e. does IGV
> depend on the node indexes stability in any way?

I tried and renumbering does not break IGV.

>
> d) It seems odd to have a check for RenumberLiveNodes in
> PhaseRenumberLive::PhaseRenumberLive super constructor call, when all
> calls to PhaseRenumberLive seem to be predicated externally with it?
>
>   472 PhaseRenumberLive::PhaseRenumberLive(...
>   473                                      ...
>   474                                      ...) :
>   475   PhaseRemoveUseless(gvn, worklist, RenumberLiveNodes ?
> Renumber_Live : Remove_Useless) {

Yes, that is a valid point, Tobias also noted that. The updated webrev 
corrects that issue.

Here is the updated webrev:
[9]: http://cr.openjdk.java.net/~zmajo/8129847-9/webrev.06/
[8u]: http://cr.openjdk.java.net/~zmajo/8129847-8u/webrev.06/

Testing: JPRT.

Thank you and best regards,


Zoltan


>
>
> Thanks,
> -Aleksey
>



More information about the hotspot-compiler-dev mailing list