2012-12-14 2 views
6

내 코드에서 잠재적 인 메모리 누수가 있고 해결책을 찾으려고합니다. Android 프레임 워크 용 Spring을 사용하고 있습니다. 그리고 더 구체적으로메모리 누수, 안드로이드 용 봄

RestTemplate.exchange(); 

온 더 플라이 바인딩을 만들기 위해서. 그러나 메모리 분석을 할 때 다음을 얻습니다.

1.628 "com.products.Product"의 인스턴스, "dalvik.system.PathClassLoader @ 0x43692b80"이 1.363.064 (22,20 %) 바이트를 차지합니다. . 이러한 인스턴스는 ""로로드 된 "java.lang.Object []"의 한 인스턴스에서 참조됩니다. dominator 트리는 다음과 같습니다.

클래스 com.products.ProductList @ 0x436d7ea8 시스템 클래스 | 1.628 | 8 | 130.240 | 8

mFilteredProducts 인 java.util.ArrayList @ 0x43a4eab0 | 1.628 | 24 | 130.240 | 0x43bdc888 @ 6.552

배열 java.lang.Object 상위 [1,628] | 1.628 | 6.528 | 130.240 | 6.528

[274] com.products.Product @ 0x4398b038 | 1 | 80 | 80 | 760

[1175] com.products.Product @ 0x43b26868 | 1 | 80 | 80 | 808

........

상기 하나의 분모 인 트리

. 그러나 가비지 컬렉터를 활성화하는 안전한 방법이 있는지 궁금합니다.

System.gc(); 

안전합니까? 그러나,이 메모리 누출을 중단하는 방법이 있습니까? com.products.Product 클래스는 JSON 필드를 해당 속성에 바인딩하는 단순한 POJO입니다. json으로 결합하는 데 사용됩니다 일반적으로 POJO는 다음과 같습니다 :

@JsonIgnoreProperties(ignoreUnknown = true) //must be there all times most likely 
public class MyPojo { 

@JsonProperty("Products") 
private ArrayList<Product> products; 

public ArrayList<Product> getProducts() { 
    return products; 
} 

public void setProducts(ArrayList<Product> products) { 
    this.products = products; 
} 
} 

com.products.Product :

@JsonIgnoreProperties(ignoreUnknown = true) //must be there all times most likely 
public class Products { 

@JsonProperty 
private String prodnum; 
@JsonProperty 
private String brand; 
@JsonProperty 
private String name; 

     //get/set 
} 

답변

0

System.gc() 안전 호출. 그러나 반드시 실제 가비지 수집을 트리거하지는 않습니다. 이 메소드를 호출하면 JVM이 가비지 콜렉션을 수행하기 위해 모든 노력을 기울일 것을 제안합니다. Java에서 강제로 수행 할 수있는 방법은 없습니다.

메모리 누수에 관해서.ProductList을보십시오. 왜 모든 객체를 보유하고 있습니까? ProductList가 여전히 응용 프로그램의 어디에서나 참조되는 경우 해당 제품은 모두 릴리스되지 않습니다. @wajda 이미 내가 데스크톱 응용 프로그램과 비슷한 문제가 있었다

오늘 말했고, 문제는 내가 사용 이후의 PreparedStatement와 ResultSet 객체를 폐쇄되지 않았 음을이었다로

0

으로 System.gc()는 안전합니다. 약 600 개의 쿼리 후에 256MB의 할당 된 공간을 채웠습니다. JVisualVM (JDK에 포함시켜야 함)을 사용하고 쌓여있는 것을 분석 한 후, char 배열이 공간의 80 %를 차지하는 것을 보았고 모두 공백이었습니다.

사용할 때마다 모든 JSON 객체를 시도하고 닫은 다음 도움이되는지 확인하십시오.

건배