검색충
288
2020-11-22 22:14:06 작성 2020-11-22 22:14:26 수정됨
2
138

자바 list map 메모리 해제 방법


데이터를 조회해서 엑셀로 추출하는 샘플 코드입니다. 

생성

public class MainTest {
	public static void main(String[] args) {
		new JFramTest();
	}
}

swing 생성

public class JFramTest extends JFrame{

	public JFramTest() {
		new Frame("Test");
		
		this.setLocation(200, 200);
		this.setSize(new Dimension(200,200));
		
		this.setLayout(new FlowLayout());
		
		JButton button = new JButton("Test");
		this.add(button);
		
		JTextField textField = new JTextField(10);
		this.add(textField);
		
		ActionListener listener = new ActionListener() {			
			@Override
			public void actionPerformed(ActionEvent e) {
				WorkTest workTest = new WorkTest();
				workTest.mapTest(Integer.parseInt(textField.getText()));						
			}
		};
		
		button.addActionListener(listener);
		
		this.setVisible(true);
	}
}

데이터생성


public class WorkTest {
	public void mapTest(int cnt) {
		ArrayList<LinkedHashMap<String, Object>> list = new ArrayList<LinkedHashMap<String, Object>>();

		LinkedHashMap<String, Object> map = new LinkedHashMap<>(3);
		for(int i=0; i<cnt; i++) {			
			map.put("T", System.currentTimeMillis());
			map.put("N", "NAME" + i);
			map.put("C", i);
			
			list.add(map);
			map.clear();
		}
	}
	
	private void exportExcel(ArrayList<LinkedHashMap<String, Object>> list) {
		ExcelTest excelTest = new ExcelTest(); 
		excelTest.ExcelTest(list);
		
		//list.clear();
		//list = null;
	}

}

엑셀 추출

public class ExcelTest {
	public void ExcelTest(ArrayList<LinkedHashMap<String, Object>> list) {
		System.out.println("엑셀 작업..");
		
//		list.clear();
//		list = null;
		
	}

}

테스트로 숫자를 받아서 데이터를 생성하였습니다. 

대충 천만을 입력해서 넘기면 메모리가 800MB정도 사용이 되고 해제가 되었으면 하는데 해제가 되질 않습니다.

찾아보면 null을 넣으면 된다고 하는데 해제가 안됩니다.

동일하게 천만을 계속 넣어서 진행을 하면 800MB를 계속 사용하고 더 올라가진 않고

이천만을 넣으면 1000MB 이상으로 올라갑니다. 

미리 할당을 하는거 같은데 사용하지 않을 때는 해제 시키고 싶은데 어떻게 처리해야 할지 모르겠습니다. 

도움 부탁드립니다.

0
  • 답변 2

  • yeori
    1k
    2020-11-23 06:58:25
    대충 천만을 입력해서 넘기면
    메모리가 800MB정도 사용이 되고
    해제가 되었으면 하는데

    해제가 안되어서 어떤 문제를 겪고 있나요?

  • 검색충
    288
    2020-11-23 11:45:48 작성 2020-11-23 21:51:44 수정됨
    800mb정도로 테스트하였는데
    1기가 이상도 발생하고 데이터가 늘어나고 이러면 메모리사용량이 더 높아집니다
    높으면 다른 프로그램에 영향을 주거나 계속 사용 시 out of memory가 발생하지 않을까해서 방지하려고 합니다
  • 로그인을 하시면 답변 을 등록할 수 있습니다.