postInstantiate buildSessionFactory慢/内存庞大的数据库

Nas*_*LEK 5 java performance hibernate

拥有超过520个表的ERP数据库,EntityPersister的postInstanciate非常慢并且消耗超过512M,这对于仅一个会话Factory而言,应用程序变得非常慢.

Nas*_*LEK 4

我无法发布所有更改,但这里是想法:

\n

1_ Hibernate 为所有实体和集合创建许多实体加载器(每个实体和每个集合有多种类型的加载器),\n此操作应按需完成,实体或集合加载器应在需要时创建,而不是在会话构建期间创建工厂,即使您有 500 个实体,也不意味着用户将从每个实体加载数据。

\n
    private Map LoaderMap = new LoaderMap();//instead Hashmap  \n    class LoaderMap extends HashMap{\n        @Override\n        public Object get(Object key) {         \n            Object obj = super.get(key);\n        \xe2\x80\xa6.\n        }\n    }\n    \n
Run Code Online (Sandbox Code Playgroud)\n

2_DirectPropertyAccessor为 buildGetter 方法调用 getDeclaredField 两次,为 buildSetter 调用两次,使用缓存是一个很好的优化

\n

对 Ulrich Scholz 的回应:\n我将一个包含所有固定类的 jar 添加到项目中,在我的例子中,它的 Webapp 应用程序部署在 Tomcat 上,您所需要做的就是使用以下命令修复 Jars 的加载顺序:

\n
<Context>\n<Resources>\n      <PreResources className="org.apache.catalina.webresources.FileResourceSet"\n                base="${catalina.base}/webapps/AGIWERP/WEB-INF/lib/AAACLZ-1.0.jar"\n                webAppMount="/WEB-INF/lib/AAACLZ-1.0.jar" />\n</Resources>\n\n</Context>\n
Run Code Online (Sandbox Code Playgroud)\n

这意味着您的类应该在原始类之前加载

\n