On Thu, Mar 19, 2015 at 12:24 AM, Robert Schmelzer <rob...@schmelzer.cc>
wrote:

> Sorry, I was unprecise - my example should have referenced to the
> EntityManagerFactory (SessionFactoryImpl in Hibernate). You would not
> expect them, to throw away its cached configuration on memory preasure. I
> do not either expect that from Tapestry.
> I cannot make our results public because of regulatory issues. I will try
> to setup a show case for that and will offer a patch. This will take me a
> few days.
>

I don't think we are going to simply do away with the SoftReferences
without any replacements so I wouldn't even attempt at offering such a
patch. I just don't agree that a memory cache should be permanent
construct. If your object is not in a cache, you'll simply incur a cache
miss and re-create the object on the fly. It is not typical that a cache
will grow indefinitely. If you are adamant on this approach, you could
probably convince us to add a symbol to control the cache behavior (i.e. to
never purge objects from it). Guava has excellent, easily configurable
cache implementations.

Kalle


> Robert
>
> Am 18.03.2015 um 18:19 schrieb Kalle Korhonen:
>
>  On Wed, Mar 18, 2015 at 12:44 AM, Robert Schmelzer <rob...@schmelzer.cc>
>> wrote:
>>
>>  I do not agree with you on that  point. Tapestry is designed to cache the
>>> page. When you do not have enough memory to hold your pages cached
>>> basically the system does not work as designed so you should fail early.
>>> Otherwise you possible defer the problem to production use. Fail early
>>> means you should try to see the problem in the early stages on dev, where
>>> you try out all your pages. As I mentioned in my other post - you would
>>> also not expect the EntityManager to work soft-refereences or spring
>>> application context to work soft referenced.
>>>
>>>
>>>  That's the definition of a memory cache - it trades memory for better
>> performance. The primary use case for soft refences is for caching so
>> seems
>> to me it works exactly as designed. Your comparison to the EntityManager
>> is
>> flawed since it's created per request. An EntityManager is designed to be
>> inexpensive to create. There are many areas that need improvements in
>> Tapestry but this is not one in my opinion. However, you seem to strongly
>> think otherwise, so you probably have some data to back this up. Do you
>> have a memory dump and trending cpu/memory charts of a sufficiently large
>> system you can share with us to demonstrate the problem? Jvisualvm
>> snapshots should work fine. And furthermore - how would you like this
>> changed? If it's just adding a Page as a threadlocal, perhaps you can just
>> write a patch for it.
>>
>> Kalle
>>
>>
>>  Am 18.03.2015 um 04:23 schrieb Kalle Korhonen:
>>>
>>>   In my opinion, soft referencing page objects is highly appropriate
>>> usage
>>>
>>>> here. If there's pressure on the available memory, it makes sense to
>>>> trade
>>>> performance for memory instead of exiting with OoM. This is simple
>>>> condition to detect and should be visible with any reasonable monitoring
>>>> tool. If you are hitting memory limits, you'll need to allocate more
>>>> memory
>>>> for the application for optimal performance. Soft references are
>>>> especially
>>>> useful here because you can optimize its behavior with the
>>>> -client/-server
>>>> setting depending on your preferences.
>>>>
>>>> Kalle
>>>>
>>>> On Tue, Mar 17, 2015 at 4:26 PM, Howard Lewis Ship <hls...@gmail.com>
>>>> wrote:
>>>>
>>>>   Possibly we need something more advanced; our own reference type that
>>>> can
>>>>
>>>>> react to memory pressure by discarding pages that haven't been used in
>>>>> configurable amount of time.
>>>>>
>>>>> Or perhaps we could just assume that any page that has been used once
>>>>> need
>>>>> to be used in the future and get rid of the SoftReference entirely (or
>>>>> otherwise janitorize it in some way).
>>>>>
>>>>> On Tue, Mar 17, 2015 at 1:24 AM, Robert Schmelzer <rob...@schmelzer.cc
>>>>> >
>>>>> wrote:
>>>>>
>>>>>   Hello,
>>>>>
>>>>>> I recently came accross the implementation of PageSourceImpl where
>>>>>> PageImpl instances are softly refereneced into the pageCache:
>>>>>>
>>>>>> private final Map<CachedPageKey, SoftReference<Page>> pageCache =
>>>>>> CollectionFactory.newConcurrentMap();
>>>>>>
>>>>>> This implementation caused troubles, when you bring your system into
>>>>>> memory preassure. The JVM will start to throw away the PageImpl to
>>>>>> free
>>>>>>
>>>>>>  up
>>>>>
>>>>>  memory - but during request processing he needs the PageImpl again and
>>>>>> starts creating it again. So basically you end up loosing your
>>>>>> pageCache
>>>>>>
>>>>>>  at
>>>>>
>>>>>  all and start creating the PageImpl instances on every request, which
>>>>>>
>>>>>>  take
>>>>>
>>>>>  way to much time and takes load onto the CPU. So basically you are
>>>>>>
>>>>>>  hiding a
>>>>>
>>>>>  memory problem by making the system slow and raise CPU load.
>>>>>>
>>>>>> I would suggest to use "normal" references for the PageCache or at
>>>>>> least
>>>>>> only do SoftReferences only when not in production mode. Otherwise we
>>>>>> are
>>>>>> going to cover memory problems for too long.
>>>>>>
>>>>>> What do you think about that?
>>>>>>
>>>>>> Robert
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>>>>
>>>>>>
>>>>>>
>>>>>>  --
>>>>> Howard M. Lewis Ship
>>>>>
>>>>> Creator of Apache Tapestry
>>>>>
>>>>> The source for Tapestry training, mentoring and support. Contact me to
>>>>> learn how I can get you up and productive in Tapestry fast!
>>>>>
>>>>> (971) 678-5210
>>>>> http://howardlewisship.com
>>>>> @hlship
>>>>>
>>>>>
>>>>>  ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>
>>>
>>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>

Reply via email to