64 bits JVM vs. 32 bits JVM

최근에 신규 도입되는 대부분의 장비는 64 bits 장비들이다. 따라서 OS도 64bits Linux를 설치하는데 당연히  JVM도 64bits를 설치하고 있다. 64 bits가 당연히 더 성능이 좋을 것이라고 예상하면서...
최근 작업 중에 이상한 점을 발견했는데 프로그램에서 사용하는 메모리가 크게 증가 되었다는 점이다.
확인해본 결과 64 bits의 JVM을 사용하기 때문에 발생하는 문제였다. 자세히는 살펴보지 않았지만 짐작컨데 32 bits에서는 레퍼런스를 저장하는 부분이 32bits로 설정되어 있고, 64 bits 에서는 2배로 더 많이 잡혀져 있을 것이다. 그래야만 Heap을 더 많이 사용할 수 있을테니까...
이런 이유때문에 사이즈가 작은 많은 객체를 사용하는 애플리케이션에서는 객체의 레퍼런스를 유지하는데 사용되는 메모리가 당연히 증가할 수 밖에 없다.

다음과 같은 프로그램을 이용하여 테스트 해보았다.

public class MemoryTest {

  public static void main(String[] args) {

    Runtime.getRuntime().gc();

    System.out.println("Total allocated memory before test: " + Runtime.getRuntime().totalMemory());

    long beforeFree = Runtime.getRuntime().freeMemory();

    String str = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";

    SortedSet<MyItem> datas = new TreeSet<MyItem>();

    long real = 0;

    for(int i = 0;i < 10000; i++) {

      MyItem item = new MyItem();

      item.id = i;

      item.data = str.getBytes();

      datas.add(item);

      real += item.data.length + Integer.SIZE;

    }

    Runtime.getRuntime().gc();

    long endFree = Runtime.getRuntime().freeMemory();

    System.out.println("Used memory: " + (beforeFree - endFree) + ", real data memory: " + real + ", allocated memory: " + Runtime.getRuntime().totalMemory());

  }

}

 

class MyItem implements Comparable<MyItem> {

  int id;

  byte[] data;

 

  public int compareTo(MyItem item) {

    if(id == item.id) return 0;

    return id > item.id ? 1 : -1;

  }

}

결과는 다음과 같다. 동일한 장비에 두개의 JVM을 설치하고 테스트 하였다.

64 bits
[tempsrc]$/usr/java/jdk1.6.0/bin/java MemoryTest
Total allocated memory before test: 61997056
Used memory: 1916456, real data memory: 1320000, allocated memory: 61997056


32 bits
[tempsrc]$ /usr/java/jdk1.6.0_03/bin/java MemoryTest
Total allocated memory before test: 63832064
Used memory: 1514056, real data memory: 1320000, allocated memory: 63832064

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 김형준


Trackback URL : http://www.jaso.co.kr/trackback/190

Leave a comment
« Previous : 1 : ... 242 : 243 : 244 : 245 : 246 : 247 : 248 : 249 : 250 : ... 397 : Next »