2010-07-14 2 views

답변

1

프로파일 러를 사용하십시오. YourKit에이 기능이 있다고 말할 수 있습니다.

+0

나는 그들의 웹 사이트에서 문자열과 배열 (전용)을 텍스트 검색 기능으로 만 기억할 수는 없다. 이 기능을 올바로 이해하면 내부 기능이 프로파일 러와 통합되는 것에 의존하게됩니다. – finnw

2

메모리의 개체 수를 줄이려고합니다. 동일한 값을 가진 많은 객체가있을 수 있습니다.

장기적인 목표는 응용 프로그램에 동일한 값을 가진 개체 복사본을 하나만 유지함으로써 메모리를 절약하는 것이라고 가정합니다.

이 아이디어의 문제점은 일반적으로 동일한 값을 가진 이전 개체를 찾을 수 있도록 여분의 데이터 구조를 작성/유지해야한다는 것입니다. 예 : HashMap. (구아바 인내 같은 선반 솔루션은 꺼져 있습니다.) 조심하지 않으면이 데이터 구조가 중복을 제거하여 저장하는 것보다 더 많은 메모리를 사용할 수 있습니다.

또한 제대로 구현되지 않았으므로 "interning"데이터 구조가 개체가 가비지 수집되지 않도록 효과적으로 메모리를 누출시킬 수 있습니다. 메모리 누출 문제에 대한 해결책은 모두 WeakReferences 등을 사용하는 것과 관련이 있습니다. 즉, 더 많은 개체와 더 느린 가비지 수집을 의미합니다. 후자는 1) 내부 개체를 GC로 추적 할 필요가 있고, 2) 내부 개체가 오래 생존하는 경향이 있고 구세대에 끝날 가능성이 높고 3) WeakReference 인스턴스가 GC에 비해 상대적으로 비싸기 때문입니다 다루기 위해서.

요약하면 메모리 문제를 악화시키지 않도록주의하십시오!

+1

구글 구아바에서 Interner를 사용하는 것이 더 쉽습니다 :) – nanda

+0

@nanda - 네, 그렇지만 조심해야합니다 * 어디에 * 사용합니다. –

+0

그게 프로파일 러가 – nanda

0

Integer.valueOf(int i) 메서드에 대한 Sun/Oracle Java 구현을 살펴보십시오. 이미 인기 값 (-128에서 127까지)의 사전 결정된 캐시가 있으므로 해당 값에 대해 해당 메소드를 호출 할 때 새 인스턴스가 작성되지 않습니다.

이렇게하면 개체를 만드는 데주의를 기울이면 메모리 발자국을 줄일 수 있습니다. 아마도 객체가 어떻게 생성되는지 조사하고 생성시 객체를 캐시하려고 시도해야합니다. 아마도 대중적인 유스 케이스를 보거나 애플리케이션이 작동하는 방식을 프로파일 링하는 것일 수도있다. 이것은 응용 프로그램에 따라 달라질 수 있으며, 즉시 사용할 수있는 솔루션이 있을지는 의문입니다. 나는 이것이 현재 당신에게 너무 많은 공간을 차지하고있는 것을 해결하기보다는 오히려 장기적으로 당신에게 어떤 노력을 덜어 줄 것이라고 믿습니다.