1. 메모리 프로파일링#

1.1. 메모리 릭 체크용 샘플 코드#

import java.util.ArrayList;
import java.util.Date;

public class MemoryLeak extends Thread {
	private ArrayList<User> list = null;

	public MemoryLeak() {
		list = new ArrayList<User>();
	}

	public static void main(String[] args) {
		MemoryLeak client = new MemoryLeak();
		client.start();
	}

	public void run() {
		int i = 0;
		while (true) {
			try {
				Thread.sleep(500); // 0.5초 간격으로 실행
				User temp = new User("카운트 : " + i + " / " + new Date().toString());
				System.out.println(temp);
				list.add(temp);
				temp = null;
				i++;
			} catch (InterruptedException ex) {
			}
		}
	}

	public class User {
		private String info = null;

		public User(String info) {
			this.info = info;
		}

		public String toString() {
			return info;
		}
	}
}

1.2. 기능설명#

1.2.1. Memory Views의 All Objects 탭#

"mark current value" 와 "Run GC"를 번갈아서 몇번 실행을 해본다. Difference는 "mark current value" 했던 수치대비 변화를 나타내는데 메모리릭의 경우 이 차이가 눈에 보이기 마련이다. 위 그림에서는 MemoryLeak내부 User인스턴스의 갯수가 계속 증가함을 알 수 있다.

1.2.2. Memory Views의 All Objects 탭 > 특정 인스턴스의 힙 메모리 정보보기#

MemoryLeak내부 User인스턴스를 선택하고 메뉴에서 "Show Selection In Heap Walker"를 선택하면 힙메모리내 세부적인 정보를 알수가 있다.

1.2.3. Heap Walker의 Classes 탭#

위 그림처럼 "Use Selected Instances"를 클릭한다.

1.2.4. Heap Walker의 Classes 탭의 팝업창#

힙 메모리의 특정 인스턴스에 대한 정보를 보기 위한 진입지점이다. 해당 인스턴스가 가진 참고관계(Outgoing reference)를 볼 것인지 아니면 해당 인스턴스를 가지는 참고관계(Incoming reference)를 볼 것인지에 따라 다른 설정을 사용하면 된다. 여기서는 이 User인스턴스를 놓지 않는 참조관계를 봐야 하기 때문에 Incoming reference 로 확인한다.

1.2.5. Heap Walker의 References 탭#

User인스턴스는 ArrayList의 항목임을 알수 있다. 이 ArrayList인스턴스는 MemoryLeak 의 list필드임을 보여주고 있다.

Add new attachment

Only authorized users are allowed to upload new attachments.

List of attachments

Kind Attachment Name Size Version Date Modified Author Change note
png
c1.PNG 39.3 kB 1 19-Feb-2013 10:05 DongGukLee
png
c2.PNG 21.7 kB 1 19-Feb-2013 10:05 DongGukLee
png
c3.PNG 101.7 kB 1 19-Feb-2013 10:05 DongGukLee
png
m1.PNG 6.5 kB 1 19-Feb-2013 10:05 DongGukLee
png
m2.PNG 35.4 kB 1 19-Feb-2013 10:05 DongGukLee
png
m3.PNG 27.8 kB 1 19-Feb-2013 10:05 DongGukLee
png
m4.PNG 45.9 kB 1 19-Feb-2013 10:06 DongGukLee
png
m5.PNG 26.2 kB 1 19-Feb-2013 10:06 DongGukLee
« This page (revision-10) was last changed on 19-Feb-2013 17:28 by DongGukLee