썬은 G1(Garbage First) Garbage Collector를 상용화할 것인가?

Sun은 G1이라는 애칭으로 불리는 Garbage First 가비지 컬렉터를 Java Update 1.6.0.14와 함께 릴리즈
하였습니다. 하지만, 많은 개발자 커뮤니티에서 기다려온, 서버에 적합한 이 가비지 컬렉터를 현 시점에서는
비용을 지불하는 고객에 한해서만 사용할 수 있도록 하고 있습니다.

이 Garbage First(이하 G1) 가비지 컬렉터는 update 6u14 이상에서 작동합니다.

G1은 가비지 콜렉팅 시 시스템 pause를 줄여, 서버 측에 적합합니다. G1의 가장 큰 장점은
compaction 성능과 예측성이 향상된 Concurrent Mark-Sweep(CMS)과 사용의 간편함입니다.

하지만, 썬의 릴리즈노트에 의하면 이 가비지 컬렉터는 Java Platform Standard Edition for Business Program
통하여 제공되며 이용을 위해서는 썬에 Support Contact의 허락이 필요하다고 합니다.

많은 사람이 이는 썬의 정책 변경의 징조이며 오라클과의 합병과 무관치 않다고 생각하고 있습니다.

Java의 제약이 시작되었다. 썬은 새로운 G1 가비지 컬렉터를 포함한 Java 1.6.0.14 JDK와 JRE를
출시하며 릴리즈 노트에 'Although G1 is available for use in this release, note that
production use of G1 is only permitted where a Java support contract has been
purchased.'와 같이 명시했다.  이는 이미 오라클의 입김이 작용하기 시작한 것은 아닌가.
새롭고 멋진 기능들을 Business commercial version의 Java SE에 넣는 동안 OpenJDK는 침체
한 길을 걷게 될 것이다.  


반면, G1이 아직은 다양한 검증을 필요로 하기 때문에 위와 같은 결정을 내렸을 거란 의견도 있습니다.

릴리즈 노트를 읽고 받은 첫 느낌은
'현재의 코드는 제품으로써 미숙하지만, 출시를 진행합니다. G1은 기본적으로 비활성화되어
있지만, 여러분의 어플리케이션에 G1을 적용하여 테스트하고 싶을지도 모릅니다. G1을 활성화
하여 생기는 문제에 대해서는 Sun Support contact를 이용하지 않는다면 어떤 공식적인 도움을
기대할 수 없습니다.'
정도 였습니다.


G1이 JDK/OpenJDK7 의 중요한 기능으로 선정되면서, 현재의 상용화 결정이 이후에도 계속되지는 않을까
심히 걱정이 됩니다. 오라클에 특별히 반감을 품고 있거나 하진 않지만, 썬 보다 사업 수완 좋은 오라클이라는
게 마음에 계속 걸리는군요..

이 글의 관련글
  • Vector에 대한 소고
  • 넷빈즈 6.0 출시 :: NetBeans 6.0 Released!!
  • 윈도우 서비스모드로 설치한 톰캣 4의 설정 변경하기
  • 넷빈즈(NetBeans) 실행하기 - ClassPath 설정 v1.0
  • WebRowSet 을 이용한 JDBC 활용하기 2부
  • WebRowSet 을 이용한 JDBC 활용하기 3부
  • Java에 OpenID 적용 관련 아티클
  • JMS ( Java Messaging System ) :: 자바 메세징 시스템
  • String 타입의 날짜를 Date 타입으로 변환하기
  • 2009/06/02 16:52 2009/06/02 16:52
    Trackback Address:http://www.yunsobi.com/blog/trackback/492
    [로그인][오픈아이디란?]

    finalize 메소드의 오버라이딩을 자제해야 하는 이유.



    모든 자바 클래스의 최상위 부모클래스인 java.lang.Object 클래스에는 finalize() 메소드가 존재하며,
    Java API 에는 이 메소드는  '가비지 컬렉터가 레퍼런스를 잃은 클래스의 인스턴스를 가비지 컬렉션할 때 호출된다'
    라고 기술하고 있습니다.

    이 메소드는 객체인스턴스가 가비지 콜렉션에 의해 소멸되는 시점에 특정한 동작을 수행해야 할때도 요긴하게
    사용할 수 있는 메소드입니다만 일반적인 경우 불필요하게 이 finalize() 메소드를 오버라이딩하는 것은 자제해야합니다.

    이유는 'finalize 메소드에 의한 Collection 지연과 OOME(Out of Memory Exception)발생 가능성'
    때문입니다.
    특정 Class에 finalize 메소드가 정의되어 있는 경우, 이 Class Type의 Object는 Garbage Collection 발생시
    즉각적으로 Collection 되지 않습니다. 대신 Finalization Queue에 들어간 후 Finalizer에 의해 정리가 되는데요.
    Finalizer는 Object의 finalize 메소드를 실행한 후 메모리 정리 작업을 수행하게됩니다.
    만일 finalize 메소드를 수행하는데 오랜 시간이 걸린다면 그 만큼 객체가 오랫동안 메모리를 점유하게 되고
    이로 인해 OOME가 발생할 확률이 높아집니다.
    이런 이유로 finalize 메소드는 되도록 사용하지 말아야 합니다.

    이 글의 관련글
  • WebRowSet 을 이용한 JDBC 활용하기 1부
  • String 타입의 날짜를 Date 타입으로 변환하기
  • Struts File Upload
  • Redirection When Session Times Out :: 서블릿 필터를 이용한 리다이렉션 코드
  • 넷빈즈(NetBeans)강좌 시작에 즈음하여.. v1.0
  • WebRowSet 을 이용한 JDBC 활용하기 2부
  • 자바는 call by value? call by reference? (1)
  • SCJP 5.0 인증 시험 시뮬레이터
  • 문자열 오브젝트의 길이는?
  • 2008/11/06 11:08 2008/11/06 11:08
    Trackback Address:http://www.yunsobi.com/blog/trackback/429
    [로그인][오픈아이디란?]