Hi Gary and BCEL maintainers,

I created a PR for LruCacheClassPathRepository
https://github.com/apache/commons-bcel/pull/28 . I appreciate if you can
review them.

Regards,
Tomo


On Mon, Jun 17, 2019 at 12:11 PM Tomo Suzuki <suzt...@google.com> wrote:

> Hi Gary and BCEL maintainers,
>
> My OutOfMemoryError problem that motivated BCEL-317
> <https://issues.apache.org/jira/browse/BCEL-317> ticket has been resolved
> by a custom ClassPathRepository and I'm thinking to contribute this
> solution to BCEL library:
>
> BCEL-320 <https://issues.apache.org/jira/browse/BCEL-320> A new
> ClassPathRepository that can scan many JAR files without OutOfMemoryError
>
>
> Test cases to reproduce OutOfMemoryError:
> https://github.com/suztomo/bcel-oome-example
>
> What do you think?
>
> Regards,
> Tomo
>
> On Wed, May 22, 2019 at 11:23 AM Tomo Suzuki <suzt...@google.com> wrote:
>
>> Hi Gary and BCEL maintainers,
>>
>> I've added Javadoc for the enhancement.
>> https://github.com/apache/commons-bcel/pull/26
>> I appreciate if you can check the direction of the implementation is good
>> or bad.
>>
>> Regards,
>> Tomo
>>
>>
>> On Sun, May 19, 2019 at 11:40 PM Tomo Suzuki <suzt...@google.com> wrote:
>>
>>> Hi Gary (and BCEL maintainers),
>>>
>>> Thank you for the comment. It has been addressed. Would you check the
>>> pull request?
>>> https://github.com/apache/commons-bcel/pull/26/files
>>>
>>> Regards,
>>> Tomo
>>>
>>> On Wed, May 8, 2019 at 17:46 Tomo Suzuki <suzt...@google.com> wrote:
>>>
>>>> Hi Gary,
>>>> Created a draft PR to receive feedback.
>>>> https://github.com/apache/commons-bcel/pull/26/files . What do you
>>>> think?
>>>>
>>>> Regards,
>>>> Tomo
>>>>
>>>> From: Gary Gregory <garydgreg...@gmail.com>
>>>> Date: Wed, May 8, 2019 at 9:40 AM
>>>> To: Commons Developers List
>>>>
>>>> > Great. I look forward to seeing what you'll come up with :-)
>>>> >
>>>> > On Tue, May 7, 2019 at 4:27 PM Tomo Suzuki <suzt...@google.com.invalid
>>>> >
>>>> > wrote:
>>>> >
>>>> > > I found the discussion on getInstance method had incurred
>>>> performance
>>>> > > degradation https://issues.apache.org/jira/browse/BCEL-186 .
>>>> > >
>>>> > > From the JIRA:
>>>> > > > This feature could return as a pluggable cache if someone wants to
>>>> > > provide a patch
>>>> > >
>>>> > > I'll think about the approach.
>>>> > >
>>>> > > Regards,
>>>> > > Tomo
>>>> > >
>>>> > >
>>>> > > On Thu, May 2, 2019 at 1:22 PM Gary Gregory <garydgreg...@gmail.com
>>>> >
>>>> > > wrote:
>>>> > >
>>>> > > > 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
>>>> > > > >
>>>> > > >
>>>> > >
>>>> > >
>>>> > > --
>>>> > > Regards,
>>>> > > Tomo
>>>> > >
>>>>
>>>>
>>>>
>>>> --
>>>> Regards,
>>>> Tomo
>>>>
>>> --
>>> Regards,
>>> Tomo
>>>
>>
>>
>> --
>> Regards,
>> Tomo
>>
>
>
> --
> Regards,
> Tomo
>


-- 
Regards,
Tomo

Reply via email to