본문 바로가기

Programming/Java

Eclipse 에서 JVM(Java Virtual Machine) Heap Size 조정해서 실행하기

아마 자바 프로그래머 중에서 프로그램을 오랬동안 짜다 보면,

Eclipse에서 메모리를 많이 사용하는 덩치 큰 프로그램을 돌렸던 경험이 있을 것이다.


이때 아래와 같은 Java Heap Space가 부족하다는 경고메시지가 뜨면서 프로그램이 실행 되지 않는 경우가 있다.

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space


이럴 경우에는 어떻게 문제를 해결 해야 할까? 고민하다가 다음과 같은 기사를  발견 할 수 있었다.


Java programs executes in JVM uses Heap of memory to manage the data. If your Java program requires a large amount of memory, it is possible that the virtual machine will begin to throw OutOfMemoryError instances when attempting to instantiate an object. The default heap size if 1 MB and can increase as much as 16 MB.

Setting/Increase JVM heap size

It is possible to increase heap size allocated by the Java Virtual Machine (JVM) by using command line options.

Following are few options available to change Heap Size.


  1. -Xms<size>        set initial Java heap size  (자바 초기의 heap 사이즈를 설정)
  2. -Xmx<size>        set maximum Java heap size  (자바의 최고 heap 사이즈를 설정)
  3. -Xss<size>        set java thread stack size  (자바 thread stack의 사이즈를 설정)

For example, you can set minimum heap to 64 MB and maximum heap 256 MB for a Java program HelloWorld.


  1. java -Xms64m -Xmx256m HelloWorld  

Getting / Reading default heap size

It is possible to read the default JVM heap size programmatically by using totalMemory() method of Runtime class. Use following code to read JVM heap size.


  1. public class GetHeapSize {  
  2.     public static void main(String[]args){  
  3.   
  4.         //Get the jvm heap size.  
  5.         long heapSize = Runtime.getRuntime().totalMemory();  
  6.   
  7.         //Print the jvm heap size.  
  8.         System.out.println("Heap Size = " + heapSize);  
  9.     }  
  10. }  


이제 본격적으로 Eclipse 에서 Java Virtual Machine의 Heap Size를 실행 시에 지정 해 줄 수 있는방방법을 알아 볼까 합니다.

그래서 간단한 프로젝트인 TestProject 를 만들고 TestClass 라는 클래스를 생성 하였습니다.
이 클래스에는 Hello World 를 출력해 주고, 현재 사용하고 있는 Heap Memory의 Size를 보여주는 일을 합니다.
Runtime Class의 Java Doc를 살펴보면, totalMemory() 라는 메소드는 Java Virtual Machine의 총 메모리를 byte 단위로 돌려줍니다.

public class TestClass {
    public static void main(String [] args){
        
        System.out.println("Hello World");
        
        System.out.println("Heap Size: " + 
                Runtime.getRuntime().totalMemory() / (1024 * 1024) + " MB");
    }
}
그래서 이 프로그램을 Java Virtual Machine의 Heap Size를 Default로 해서 돌려본 결과,
다음과 같은 결과가 출력되었습니다.



그리고 아래와 같은 일련의 과정을 거쳐서 Heap Size를 조절 해 보았습니다.

 

1. 해당 프로젝트에서 속성을 클릭

 


 

 

2. 속성 창에서 Run/Debug 속성을 클릭


 

3. Launch Configurations for TestProjec 탭에서 실행하고자 하는 클래스가 없는 경우에는 우측의 New를 클릭, 있으면, 아래 목록에서 클릭



4. Arguments Tab 에서 VM arguments 에 -Xms256m -Xmx1024m (각각 초기값 256MB, 최대값 1 GB) 을 설정 하고 Appliy 를 눌러서 적용.


5. 마지막으로 설정들이 제대로 적용이 되어서 결과가 잘 나왔는 지 확인.

 정확하게 256 MB 는 나오지 않았지만, 설정값이 적용이 된 것을 알 수 있습니다.