Mercurial > hg > graal-jvmci-8
comparison src/share/vm/opto/escape.hpp @ 2249:3763ca6579b7
7013538: Java memory leak with escape analysis
Summary: Don't allocate VectorSet iterator on C heap. Reuse resource storage in EA.
Reviewed-by: never
author | kvn |
---|---|
date | Mon, 07 Feb 2011 10:25:39 -0800 |
parents | f95d63e2154a |
children | 59e515ee9354 |
comparison
equal
deleted
inserted
replaced
2248:194c9fdee631 | 2249:3763ca6579b7 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
266 void build_connection_graph(Node *n, PhaseTransform *phase); | 266 void build_connection_graph(Node *n, PhaseTransform *phase); |
267 | 267 |
268 // walk the connection graph starting at the node corresponding to "n" and | 268 // walk the connection graph starting at the node corresponding to "n" and |
269 // add the index of everything it could point to, to "ptset". This may cause | 269 // add the index of everything it could point to, to "ptset". This may cause |
270 // Phi's encountered to get (re)processed (which requires "phase".) | 270 // Phi's encountered to get (re)processed (which requires "phase".) |
271 void PointsTo(VectorSet &ptset, Node * n); | 271 VectorSet* PointsTo(Node * n); |
272 | |
273 // Reused structures for PointsTo(). | |
274 VectorSet pt_ptset; | |
275 VectorSet pt_visited; | |
276 GrowableArray<uint> pt_worklist; | |
272 | 277 |
273 // Edge manipulation. The "from_i" and "to_i" arguments are the | 278 // Edge manipulation. The "from_i" and "to_i" arguments are the |
274 // node indices of the source and destination of the edge | 279 // node indices of the source and destination of the edge |
275 void add_pointsto_edge(uint from_i, uint to_i); | 280 void add_pointsto_edge(uint from_i, uint to_i); |
276 void add_deferred_edge(uint from_i, uint to_i); | 281 void add_deferred_edge(uint from_i, uint to_i); |
332 } | 337 } |
333 | 338 |
334 // Set the escape state of a node | 339 // Set the escape state of a node |
335 void set_escape_state(uint ni, PointsToNode::EscapeState es); | 340 void set_escape_state(uint ni, PointsToNode::EscapeState es); |
336 | 341 |
337 // Search for objects which are not scalar replaceable. | 342 // Adjust escape state after Connection Graph is built. |
338 void verify_escape_state(int nidx, VectorSet& ptset, PhaseTransform* phase); | 343 void adjust_escape_state(int nidx, PhaseTransform* phase); |
344 | |
345 // Compute the escape information | |
346 bool compute_escape(); | |
339 | 347 |
340 public: | 348 public: |
341 ConnectionGraph(Compile *C, PhaseIterGVN *igvn); | 349 ConnectionGraph(Compile *C, PhaseIterGVN *igvn); |
342 | 350 |
343 // Check for non-escaping candidates | 351 // Check for non-escaping candidates |
344 static bool has_candidates(Compile *C); | 352 static bool has_candidates(Compile *C); |
345 | 353 |
346 // Perform escape analysis | 354 // Perform escape analysis |
347 static void do_analysis(Compile *C, PhaseIterGVN *igvn); | 355 static void do_analysis(Compile *C, PhaseIterGVN *igvn); |
348 | |
349 // Compute the escape information | |
350 bool compute_escape(); | |
351 | 356 |
352 // escape state of a node | 357 // escape state of a node |
353 PointsToNode::EscapeState escape_state(Node *n); | 358 PointsToNode::EscapeState escape_state(Node *n); |
354 | 359 |
355 // other information we have collected | 360 // other information we have collected |