On Thu, May 2, 2019 at 10:59 AM Tomo Suzuki <suzt...@google.com.invalid>
wrote:

> Gary,
> I didn't find ConstantUtf8.getCachedInstance
> <https://github.com/apache/commons-bcel/blob/master/src/main/java/org/apache/bcel/classfile/ConstantUtf8.java#L94>
> is used in BCEL (latest 6.3.1). I tried my custom ConstantUtf8 modification
> to leverage getCachedInstance method and it worked well:
>
> Before
>
> Without getCachedInstance, my tool created 2,6 million ConstantUtf8
> instances (before failing OutOfMemoryError: GC overhead limit exceeded) to
> check ~200 jar files
> [image: 2644k_constantutf8_without_getCachedInstance.png]
>
>
> After
>
> With getCachedInstance, my tool created just 0.6 million ConstantUtf8
> instances. It didn't throw the OutOfMemoryError.
> [image: 621k_constantutf8_with_getCachedInstance.png]
>
> My modification was to use getCachedInstance for
> ConstantUtf8.getInstance(DataInput)
> <https://github.com/apache/commons-bcel/blob/master/src/main/java/org/apache/bcel/classfile/ConstantUtf8.java#L123>
> .
>
>
> Do you know why ConstantUtf8.getCachedInstance is unused?
>

I do not.

Gary


>
> Regards,
> Tomo
>
>
>
> On Wed, May 1, 2019 at 7:02 PM Gary Gregory <garydgreg...@gmail.com>
> wrote:
>
>> On Wed, May 1, 2019 at 6:37 PM Tomo Suzuki <suzt...@google.com.invalid>
>> wrote:
>>
>> > Gary,
>> > That’s right. I missed it. I think I just need to find a way to leverage
>> > the getCachedInstance method. Thank you for quick response.
>> >
>>
>> YW. Please let us know your outcome.
>>
>> Gary
>>
>>
>> >
>> > On Wed, May 1, 2019 at 18:00 Gary Gregory <garydgreg...@gmail.com>
>> wrote:
>> >
>> > > Why not use getCachedInstance() ?
>> > >
>> > > Gary
>> > >
>> > > On Wed, May 1, 2019 at 5:20 PM Tomo Suzuki <suzt...@google.com.invalid
>> >
>> > > wrote:
>> > >
>> > > > Hi BCEL developers,
>> > > >
>> > > > We use BCEL library to inspect Java class. Thank you for the great
>> > > library.
>> > > >
>> > > > When our tool checks classes in ~200 jar files, it creates more
>> than 2
>> > > > million BCEL ConstantUtf8 instances. I suspect many of them share
>> the
>> > > same
>> > > > values such as "java.lang.String".
>> > > >
>> > > > [image: many_constant_utf8.png]
>> > > >
>> > > > Given this observation, I got an idea to to reuse ConstantUtf8 with
>> > same
>> > > > value to save memory footprint. Because ConstantUtf8 is constant,
>> > sharing
>> > > > the instances across classes should not cause a problem. Note that
>> BCEL
>> > > is
>> > > > not designed thread-safe (doc
>> > > > <https://commons.apache.org/proper/commons-bcel/faq.html>).
>> > > >
>> > > > If this is a good idea, I'm thinking to make a pull request around
>> > BCEL's
>> > > > ConstantUtf8.getInstance method:
>> > > >
>> > > >
>> > >
>> >
>> https://github.com/apache/commons-bcel/blob/master/src/main/java/org/apache/bcel/classfile/ConstantUtf8.java#L116
>> > > >
>> > > > Does anybody have any thought?
>> > > >
>> > > > --
>> > > > Regards,
>> > > > Tomo
>> > > >
>> > >
>> > --
>> > Regards,
>> > Tomo
>> >
>>
>
>
> --
> Regards,
> Tomo
>

Reply via email to