On 05/15/2012 05:51 PM, Andrej Golovnin wrote: > 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).
Nice find! Could you drill into one of the LockMode loaders and see what the larger objects referenced by that are? > > 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 _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev