Hi all,

finally I have found the cause of this problem.

But before I describe what caused it, I would like to make two suggestions:

1. Consider avoiding usage of String#toLowerCase() and String#toUpperCase()
    without specifying a Locale. Users running Hibernate on systems with 
Turkish as default
    locale may see unexpected results. In Turkish there are two lowercase 
letters 
    \u0069 ‘i’ and \u0131 ‘ı’ (dotless ‘I’). And they are totally unrelated. 
Their uppercase
    versions are \u0130 ‘İ’ (capital letter ‘I’ with dot above it) and \u0049 
‘I’.
    So if you convert \u0049 ‘I’ to lower case and the system uses Turkish as 
default
    locale, you will get \u0131 ‘ı’ (dotless ‘I’) and not 'i', e.g. 
'MY_COLUMN_I' would be converted
    to 'my_column_ı' and not 'my_column_i'. If you run Hibernate tests with 
Turkish as default locale
    some tests fail. I have for now no idea, what locale should be used instead 
of the default
    one. :-(

2. Do not use HashMap#clone(). If the JVM is started with the option
    -XX:+AggressiveOpts, the HashMap#clone() may produce memory leaks.
    See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7042126.
    IMHO the copy-constructor should be as fast as #clone().

Now to the memory consumption problem. The problem was introduced with the fix
of https://hibernate.onjira.com/browse/HHH-4546. Additional LockModes lead
to increased memory consumption. When I comment the changes made by 
HHH-4546 in the method AbstractEntityPersister#createLoaders() out, I get nearly
the same size for SessionFactoryImpl as it was in Hibernate 3.2.7
(see http://goo.gl/UB47c).

I have created a small patch to solve/avoid this problem. It creates loaders 
lazily for some
of LockModes (see http://goo.gl/wUn4w). With this changes the memory consumption
of SessionFactoryImpl right after server startup drops from ca. 370MB to
ca. 132MB (see http://goo.gl/GQw3p).

What do you think about this changes?
Btw it passes all tests. :-)

One more thing: Could we have a property similar to 
"hibernate.listeners.envers.autoRegister"
for Validator? I would like to disable Validator completely as it produces too 
much garbage
(look at the pictures) when the application is deployed. 

Best regards
Andrej Golovnin
_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to