RFR: 8042778: Getting all visible methods in ReferenceTypeImpl is slow
Jaroslav Bachorik
jaroslav.bachorik at oracle.com
Sat Jul 12 09:57:21 UTC 2014
On 07/11/2014 11:28 PM, Jeremy Manson wrote:
> Hi Jaroslav,
>
> I haven't written many Streams yet, so perhaps I'm missing something
> obvious / well-known. Streams can replace the original code in an
> obvious way (filter the elements of list based on whether they are
> contained in map.values()), but I'm not sure how the filter operation
> becomes O(1) unless we build the HashSet?
Probably I should have been more explicit about this.
The map keys (a set) are derived from the map values by concatenating
the method name with the method signature. Utilizing this you can then
come up with a code like this:
return allMethods().stream()
.filter((m) -> map.keySet().contains(getMethodTag(m)))
.collect(Collectors.toList());
"getMethodTag(method)" is the function used to generate the hash key
from a Method instance (to be extracted from the current source code).
But we would need a benchmark to figure out which construct actually
performs better (the algorithmic complexity is the same).
-JB-
>
> Jeremy
>
>
> On Fri, Jul 11, 2014 at 3:11 AM, Jaroslav Bachorik
> <jaroslav.bachorik at oracle.com <mailto:jaroslav.bachorik at oracle.com>> wrote:
>
> Hi Jeremy,
>
>
> On 05/08/2014 08:56 PM, Jeremy Manson wrote:
>
> I'm testing out my newly acquired OpenJDK authorship with something
> simple. If I did this wrong, I apologize.
>
> Basically, the debugger becomes very slow if there are a lot of
> methods
> in a class. This can happen (O(thousands)) if you are using a code
> generation tool.
>
> http://cr.openjdk.java.net/~__jmanson/8042778/webrev.00/
> <http://cr.openjdk.java.net/~jmanson/8042778/webrev.00/>
>
>
> Have you considered using streams to avoid creation of an additional
> HashSet?
>
> -JB-
>
>
>
> Reviews from reviewers and committing from committers would be
> appreciated. Thanks!
>
> Jeremy
>
>
>
More information about the serviceability-dev
mailing list