当我尝试在ubuntu 12.04中使用cpan安装Spreadsheet :: WriteExcel perl模块时,我收到以下错误.
> Can't exec "/usr/bin/make": No such file or directory at
> /usr/share/perl/5.14/CPAN/Distribution.pm line 2078.
> JMCNAMARA/OLE-Storage_Lite-0.19.tar.gz /usr/bin/make -- NOT OK
> 'YAML' not installed, will not store persistent state Running make
> test Can't test without successful make Running make install Make
> had returned bad status, install seems impossible Running make for
> J/JM/JMCNAMARA/Spreadsheet-WriteExcel-2.40.tar.gz Has already been
> unwrapped into directory
> /root/.cpan/build/Spreadsheet-WriteExcel-2.40-gJaT_A
>
> CPAN.pm: Going to build
> J/JM/JMCNAMARA/Spreadsheet-WriteExcel-2.40.tar.gz
>
> Warning: …Run Code Online (Sandbox Code Playgroud) 有一个服务连接到 Oracle DB 来读取数据,它使用Hibernate-3.6和SpringData-JPA-1.10.x。频繁生成堆转储会导致主机内存不足。
使用 Eclipse MAT 分析一些堆转储后,发现大部分内存都累积在org.hibernate.engine.StatefulPersistenceContext -> org.hibernate.util.IdentityMap -> java.util.LinkedHashMap的一个实例中。
线程 java.lang.Thread @ 0x84427e10 ... : 29 保留总大小为 1,582,637,976 (95.04%) 字节的局部变量。
内存累积在“”加载的“java.util.LinkedHashMap”的一个实例中。
在 StackOverflow 上搜索它,它说 SessionFactory 应该是单例的,并且在每次调用清除缓存之前应该调用 session.flush() 和 session.clear() 。但SessionFactory 并未在代码中显式初始化或使用。
是什么导致了这里的内存泄漏(看起来每个查询的结果都被缓存并且没有清除)以及如何修复它?
有关 Spring Data 配置的更多信息:
TransactionManager 初始化为:
<tx:annotation-driven mode='proxy' proxy-target-class='true' />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
....
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" depends-on="...">
....
</bean>
Run Code Online (Sandbox Code Playgroud)
为了与表交互,声明了一个扩展 Spring Data Repository和JpaSpecificationExecutor的接口。两者都被输入到它将处理的域类中。 …
如何在 Spring JPA 规范中构建以下 SQL 查询?
SELECT col1, col2, MAX(col3)
FROM table_name t1
WHERE col4 IN (1,2,3) AND status IN ('STATUS_1','STATUS_2') AND
NOT EXISTS
(
SELECT 1 FROM table_name t2 WHERE t1.id = t2.parent_id
AND t2.status IN ('STATUS_3','STATUS_4')
)
GROUP BY col1, col2;
Run Code Online (Sandbox Code Playgroud)
爪哇代码:
return new Specification<TableEntity>() {
@Override
public Predicate toPredicate(Root<TableEntity> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
// how to build Predicates for the above query which has self-join and not exists.
}
};
Run Code Online (Sandbox Code Playgroud)