Java 由于字符串对象,从数据库提取时内存泄漏
我有这样一个代码:Java 由于字符串对象,从数据库提取时内存泄漏,java,string,Java,String,我有这样一个代码: public Integer detailMigration(Integer p1, Integer p2) { List<Info> memberInfo = this.memberInfoRepository.findBymemberIdBetween(p1, p2); Integer count = 0; for (Info pInfo : memberInfo) {
public Integer detailMigration(Integer p1, Integer p2) {
List<Info> memberInfo = this.memberInfoRepository.findBymemberIdBetween(p1, p2);
Integer count = 0;
for (Info pInfo : memberInfo) {
String details = pInfo.getMemberDetails();
//Do something
count++;
}
return count;
}
`List<Info> memberInfo = this.memberInfoRepository.findBymemberIdBetween(p1, p2);` returns the list of member tuples from the DB table.
is String details=pInfo.getMemberDetails;是否要在字符串池中添加新的字符串对象?由于上面的代码流导致内存泄漏。
假设在web应用程序中,我经常进行包含字符串类型列的DB查询,所以只要我从DB中获取它们,它们就会得到附加字符串池。依我看,它应该得到外接程序池,并且它在permgen中,所以它不对GC负责。请纠正我给出确切的情况
正确的方法应该是什么?您可以尝试字符串生成器,并检查该帮助是否取决于pInfo.getMemberDetails的实现详细信息,您可以共享此信息吗?getMembersDetails只是通过JPA调用从DB获取数据并返回数据。只有您调用intern的字符串常量和字符串才会放入内存池。即使是这样,也只能使用Java6。常规字符串对象只保留在堆上,并进行垃圾收集。要查找内存泄漏,可以进行堆转储并使用MAT之类的工具进行分析
for (Info pInfo : memberInfo) {
String details = pInfo.getMemberDetails();
//Do something
count++;
}