'Java'에 해당되는 글 63건

  1. 2018.08.21 shenandoah GC 1
  2. 2014.05.15 JDK 8 의 Metaspace(M) 와 Compressed Class Space (CCS)
  3. 2013.09.12 JDK 7 update가 25에서 갑자기 40으로 올라갔네요.
  4. 2013.02.26 G1 GC 에 대해서 보다 더 자세히 알고 싶다면...
  5. 2012.12.03 자바 GC에 대한 10가지 QnA
  6. 2012.10.26 Java NIO의 DirectByteBuffer는 필요한 갯수만큼만 만들어서 사용하자.
  7. 2012.05.01 JDK 7 Update4 에서 추가된 기능들
  8. 2012.04.06 High Performance Libraries of Java
  9. 2012.03.15 [Java Perm Gen GC] Perm 영역에서 GC가 발생하는 또 다른 경우
  10. 2012.03.09 [링크] 자바 메모리의 구조
  11. 2012.01.30 [Java GC] 자바의 Perm 영역에서도 GC가 일어날까? 3
  12. 2011.10.14 [자바 애플릿] 애플릿에서 사용하는 메모리 크기 증가시키기
  13. 2011.09.01 [Java Spec] JVM Spec과 Java Language Spec 문서 업데이트
  14. 2011.07.21 [자바 메모리 모니터링] JVM에서 사용하는 전체 메모리를 모니터링하는 방법
  15. 2011.07.05 [Java GC] GC가 성능에 미치는 영향에 대한 고찰 -링크
  16. 2011.05.03 [LogCompilation] 자바의 JIT가 어떻게 컴파일이 되는지 보고 싶다면...
  17. 2011.04.01 [GC] CMS 사용시 verbosegc 분석하는데 도움이 되는 자료
  18. 2011.03.29 [Java Basic] 왜 Thread의 stop 메소드는 deprecated 되었을까?
  19. 2011.03.28 [Advanced Java] Attach API
  20. 2011.03.21 [링크] Java Attach API
  21. 2010.12.23 [Java source] 자바 소스 목록
  22. 2010.12.21 [자바 객체의 크기] Shallow size와 Retained size
  23. 2010.11.15 Java Concurrency in Practice 저자의 블로그
  24. 2010.08.09 [Java GC Options] 버전별 GC 옵션이 잘 정리되어 있는 페이지
  25. 2010.06.30 [Java Concurrent] 일반적으로 모르는 자바에 대한 사실들
  26. 2010.05.28 [자바 메모리 릭] Memory leak에 대한 좋은 자료
  27. 2010.01.19 [OpenJDK] OpenJDK에 대하여 1
  28. 2009.12.22 [자바 GC] 도대체 Permanent 영역에는 어떤 놈들이 있는 것일까?
  29. 2009.12.22 [Java PDF] 자바로 PDF 파일을 만들어 주는 iText 라이브러리
  30. 2009.06.16 [JavaOne 2009] 자바원 2009 세미나 자료들

shenandoah GC

Java/GC 2018. 8. 21. 16:24

https://wiki.openjdk.java.net/display/shenandoah/Main


Ultra fast Garbage Collector in Java


자세한 설명은 링크와 아래 PDF 에  ...


https://shipilev.net/talks/devoxx-Nov2017-shenandoah.pdf



Posted by tuning-java
,

JDK 8 에서는 Heap 영역 중 Perm 영역이 사라졌다. 

정확하게는 사라졌다기 보다 두개로 쪼개졌고, Full GC 의 대상에서 제외되었다. 


JDK8에서는 jstat 수행결과가 다음과 같이 나오는데...

$ jstat -gcutil 66793 1s

  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   

  0.00   1.34  76.18  30.51  97.54  96.72     45    0.138     0    0.000    0.138


대체 Perm 영역을 나타내는 P가 없어지고 M과 CCS가 나타났는데 이게 뭘까? 


궁금하다면 아래 링크 클릭 ! 


http://java-latte.blogspot.kr/2014/03/metaspace-in-java-8.html

(내 머리속에 들어갔다 온 것처럼 내가 원하는 모든 것을 깔끔하게 정리 !)

Posted by tuning-java
,

제목 그대로다. 

JDK7의 버전이 update 25에서 40으로 훌쩍 뛰어넘어버렸다. 

가장 주목할만한 점은 JMC라는 JRockit에서만 제공하던 Mission Control이라는 모니터링 툴이 추가된 것인데, Commercial 라이센스에서 사용할 수 있단다. 

과연 얘네들이 이야기하는 Commercial 라이센스는 무엇일까?

아래 문장을 보면 나와 있음.

Java Mission Control (JMC) is a commercial feature available for java users with a commercial License. (???)

http://www.oracle.com/technetwork/java/javase/7u40-relnotes-2004172.html

Posted by tuning-java
,

오라클에서 이런 사이트를 제공하는구나. Garbage First 에 대해서 알고 싶다면 클릭 !!!

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/G1GettingStarted/index.html#overview

관련하여 찾아 보니

http://www.oracle.com/technetwork/tutorials/index.html

OBE라고 오라클에서 Oracle By Example이라는 사이트를 제공하는군.

오라클로 넘어가고 나서 가장 훌륭한 작업!!!. ㅎㅎㅎ


추가로 볼만한 것들

GC: http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

Command line tools : http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/JavaJCMD/index.html

Posted by tuning-java
,
Posted by tuning-java
,

어제 성능 테스트를 하다가 성능이 안나오는 프로그램이 있어 확인을 하던 중, 
어떤 프로그램에서 System.gc()라는 불러서는 안되는 코드를 부른 다는 것을 직감(?)했다. 

개발된 코드를 뒤져도 그 코드는 안나오고, 
어디를 뒤져오 안나오길래 아주 단순한(?) 방법으로 원인이 되는 놈을 찾아 내었다. 
(여기서 단순한 방법은 http://www.tuning-java.com/421 를 참고하시길...)

우선 관련해서 DirectByteBuffer를 막 생성하면 안된다고 이야기해 주신 정보를 제공해주신 훌륭한 "응주박" 선수에게 감사하다는 말을 전한다. 

이러한 문제가 발생하는 원인을 확인해 보기 위해서 아침에 출근하자마자 샘플 코드를 작성해봤다. 먼저 다음의 코드를 보자.

import java.nio.ByteBuffer;


public class DirectByteBufferCheck {


  public static void main(String[] args) {

    DirectByteBufferCheck check=new DirectByteBufferCheck();

    for(int loop=1;loop<99999999;loop++) {

      check.getDirectByteBuffer();

      if(loop%100==0) System.out.println(loop);

    }

  }

  public ByteBuffer getDirectByteBuffer() {

    ByteBuffer buffer;

    buffer = ByteBuffer.allocateDirect(65536);

    return buffer;

  }

}

뭐 별거 없다.
루프 돌면서 ByteBuffer의 allocateDirect() 메소드를 호출해서 DirectByteBuffer를 생성한다.
이 프로그램 돌리고 GC 상태를 보면 다음과 같이 나온다.

$ jstat -gcutil 1484 1s

  S0      S1      E        O       P        YGC     YGCT    FGC    FGCT     GCT   

  0.00   0.00   2.00   0.90  22.04      0    0.000    77    0.736    0.736
  0.00   0.00   0.00   0.90  22.07      0    0.000    84    0.795    0.795
  0.00   0.00   0.00   0.90  22.07      0    0.000    91    0.855    0.855
  0.00   0.00   0.00   0.90  22.08      0    0.000    97    0.911    0.911
  0.00   0.00   0.00   0.90  22.08      0    0.000   104    0.975    0.975
  0.00   0.00   0.00   0.90  22.08      0    0.000   111    1.041    1.041
  0.00   0.00   0.00   0.90  22.08      0    0.000   117    1.093    1.093

빨간색으로 표시한 Full GC 횟수가 1초에도 무지막지하게 증가하는 것을 볼 수 있다. 


왜 이런 현상이 발생할까?


그 원인은 ByteBuffer.allocateDirect(65536) 메소드 호출 부분에 있다. 
이 메소드를 부르면
1. DirectByteBuffer라는 클래스의 생성자가 호출되고 
2. 그 생성자에서는 Bits.reserveMemory(65536) 이라는 static 메소드를 호출한다.
Bits 클래스의 소스는 "요기링크"를 참조하기 바란다. 


링크를 보면 왜 DirectByteBuffer클래스의 객체를 계속 생성하면 System.gc()가 계속 발생할 수가 있는지를 확인해 볼 수 있다. 

Posted by tuning-java
,

Java Performance 뉴스레터에서 JDK 7 Update 4 에서 변경된 사항이 많다고 하길래 한번 살펴봤다. 

- jcmd 명렁어 추가
- Java Flight Recorder 기능 추가
- G1 안정화 버전 출시

직접 확인은 해보지 않았으나, 간단히 살펴보면 JRockit에서 제공되던 기능들이라고 한다.
- jcmd 명령은 실행중인 자바 프로세스에 붙어서 각종 정보들을 읽어들이는 기능이다. 
jstat, jstack 등을 통해서 제공 받을 수 있는 내용들을 이 명령어 하나로 처리할 수 있다. 운영에서  막 사용해도 될런지는 모르겠다.  
자세한 내용은 http://hirt.se/blog/?p=211 를 참조하기 바란다.

- Java Flight Recorder는 자바용 블랙박스라고 생각하면 된다고 한다. 
자세한 내용은 http://docs.oracle.com/cd/E15289_01/doc.40/e15070/introduction.htm 를 참조하기 바란다. 

- G1 안정화는 이제 좀 믿을만 하다는 것인가 ? 얘는 좀더 지켜봐야 할 듯 하다. 

어찌 되었건 JDK 7 으로 업그레이드가 된다면, Update 4 이상에서는 장애상황 확인이 보다 쉬워  질 것으로 보인다. ㅎㅎㅎ 

Posted by tuning-java
,

Java Performance 라는 사이트에서 제공하는 뉴스레터를 보다가 발견한 내용이다.

http://vanillajava.blogspot.co.uk/2012/02/high-performance-libraries-in-java.html


가장 마음에 드는 것은 구글의 구아바. (구글이 만들어서 웬지 더 믿음이 가~~~)

http://code.google.com/p/guava-libraries/


High scale lib 

http://sourceforge.net/projects/high-scale-lib/


Trove

http://trove.starlight-systems.com/


Fastutil

http://fastutil.dsi.unimi.it/


나중에 첫 책 2nd Edition 쓸때 참고해야겠다. ㅎㅎ


Posted by tuning-java
,
앞서 String.intern() 메소드를 사용하면 Perm 영역에서 GC가 많이 발생할 수 있다고 했다. 
http://tuning-java.com/455 참고.
그런데, 이 글을 읽는 분들은 대부분 아시겠지만, Perm 영역에는 클래스와 메소드등의 정보가 들어가게 된다. 많은 클래스를 읽어들일 수록 Perm 영역은 당연히 부족해지고, Full GC를 발생시킬 수 있다. 

이런 문제를 발생시키는 주된 원인은 Reflection을 사용해서 메소드 호출등을 할 경우도 포함된다.

왜 Perm 영역에서 Full GC가 발생할 수 있는지에 대한 설명이 잘 되어 있는 문서다. 
http://anshuiitk.blogspot.com/2010/11/excessive-full-garbage-collection.html

 관심 있는 분들은 한번 정도 읽어 보면 좋을 듯 하다. 

그리고, 
http://coding.derkeiler.com/Archive/Java/comp.lang.java.programmer/2006-11/msg00122.html
이 글도 보면 도움이 될 것이다. 
 
Posted by tuning-java
,
내가 지금까지 본 글 중에서 가장 마음에 쏙 들게 작성되어 있다.
(물론 시간 관계상 그림만 봤다. ㅎㅎ)

http://www.ibm.com/developerworks/java/library/j-codetoheap/index.html 
Posted by tuning-java
,
내가 기고한 어떤 글에 어느 분께서 질문을 올려서 여기에 정리한다.
질문의 골자는 "다른분께서 Perm 영역에서는 GC 가 발생 안한다고 했는데, Perm영역에서도 GC발생한다는 것이 이상하다"는 내용이다. 
나도 내 눈으로 확인하기 전까지는  GC가 발생안한다고 생각했으므로 당연한 질문이라고 생각한다.
지금까지 내가 무슨 이야기하는지 이해가 안되시는 분은
이글 (http://helloworld.naver.com/helloworld/1329) 먼저 읽으시면 조금 이해가 쉬울 것이다. 

다음의 소스를 보자.

public class InternTest {

  public static void main(String[] args) throws Exception{

    InternTest test=new InternTest();

    Thread.sleep(10000);   System.out.println("Starting");

    while(true) {

      test.callIntern();Thread.sleep(5000);

      System.out.print(".");

    }

  }

  private void callIntern() {

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

      String a="1234567890"+System.nanoTime();

      String newString=a.intern();

    }

  }

}

 아주 간단한 소스인데, callIntern() 이라는 메소드를 보면 새로운 String을 계속 만들어 intern() 메소드를 호출하고 있다. 
이 클래스를 컴파일하고 jstat으로 모니터링하면 다음과 같은 결과를 볼 수 있다.
(jstat에 대해서는 "자바 성능을 결정짓는 코딩 습관과 튜닝 이야기"를 참조하거나,
http://helloworld.naver.com/helloworld/6043 를 참고하기 바란다.)

예를 들어 이 프로그램의 프로세스 ID가 4800 일 때 결과는 다음과 같이 출력된다.  

$ ./jstat -gcutil  4800 3s
  S0   S1   E     O    P     YGC  YGCT  FGC FGCT  GCT
  0.00 0.16 10.43 8.79 
98.37 3869 1.247 87  1.815 3.061
  0.02 0.00 52.12 8.77 
45.21 3884 1.250 88  1.840 3.090
  0.00 0.16 83.39 8.77 
98.89 3903 1.257 88  1.840 3.097
  0.00 0.16 27.11 8.78 
15.04 3919 1.262 89  1.857 3.119

 
P라고 표시되어 있는 내용의 값이 계속 변경되는 것을 볼 수 있다.
여기서 P가  Perm 영역의 사용량(%)인데, 보는 것과 같이 그 크기가 지속적으로 바뀌는 것을 볼 수 있다.
그리고 우측에 있는 FGC라는 값도 증가하는 것이 보인다.

자바의 Perm 영역에 클래스와 메소드 정보만 저장되어 있다고 생각하는 것이 일반적이지만,
실제로는 intern된 String 값도 이 영역에 저장된다. 

참고) intern된 String은 뭘까?
String은 기본적으로 equals()메소드로 값을 비교한다. 그렇게 되면 char값들을 비교하기 때문에 성능이 느릴 수 있지만, String 의 실제 값에 대해서 intern() 메소드를 호출하면 해당 값은 equals() 메소드가 아닌 == 으로 비교가 가능하다. 추가로 이  intern()메소드는 native 메소드로 선언되어 있다. 
하지만, 이렇게 String비교를 조금 빠르게 하기 위해서 intern() 메소드를 호출한 후 결과를 비교하는 것은 Perm영역을 마구잡이로 사용하겠다는 의미이기 때문에 "절대" 권장하는 방법은 아니다. 그냥 이런 것이 있구나 정도로 참고하고 있기 바란다. ^^;

추가로,
Perm영역에 어떤 데이터들이 저장되어 있는지 보려면 
jmap -permstat pid
명령어로 확인하면 되며,
그 결과에 가장 첫 출력물을 보면 interned String 크기가 출력된다.


2013.8.5 추가
와 
(의 댓글)에 따르면 JDK 7 이상 부터는 String.intern() 메소드의 호출 결과가 더 이상 Perm 영역에 들어가지 않고 Heap 영역으로 들어가게 되었네요. ^^;


 


Posted by tuning-java
,
http://www.webmo.net/support/java_memory.html

요즘 애플릿을 사용하는 프로그램을 쓰고 있는데,
메모리가 부족해서 항상 버벅거린다.
이러한 문제를 해결하기 위한 방법은 바로 메모리 크기를 증가시키는 것 !!!

위의 옵션대로 값을 변경 한 후 해당 브라우저를 재시작하면 지정한 값이 먹는다.
나는
-Xms256m -Xmx512m 으로 설정해 놨다. ㅎㅎㅎ  
Posted by tuning-java
,
몇년간 업데이트가 되지 않았던 
JVM Spec 문서(1999년이 최종이었음)와
JLS (2005년이 최종이었음)
문서가 이번에 JDK 7이 나오면서 새로운 버전의 문서가 제공되고 있다.

기존의 버전 번호를 그대로 가지 않고,
Java SE 7 Edition
이라는 이름으로 문서 이름이 바뀐 점이 특이하다.

다운로드 링크는 요기다. 
http://download.oracle.com/javase/cmn/spec_index.html 

영어인건 다 아시죠?  
Posted by tuning-java
,
회사 동료분이 공유해 주신 자료가 있어 그 링크를 적어놓는다.

http://www.ibm.com/developerworks/linux/library/j-nativememory-linux/ 

리눅스에서 특정 프로세스의 메모리 사용량을 모니터링하는 방법이다.

이걸 진작에 알았더라면, 트러블 슈팅 책에 썼을텐데.
- -;

 
Posted by tuning-java
,
GC가 얼마나 성능에 영향을 주는지에 대한 설명이 잘 되어 있는 내용 링크...

http://blog.dynatrace.com/2011/03/24/the-impact-of-garbage-collection-on-java-performance/ 

그리고 Sun, JRockit, IBM의 JVM이 각각 어떻게 다른지에 대해서도 알아보는 것도 좋을 것이다.

http://blog.dynatrace.com/2011/05/11/how-garbage-collection-differs-in-the-three-big-jvms/

 
Posted by tuning-java
,
http://wikis.sun.com/display/HotSpotInternals/LogCompilation+overview 를 보면 상세한 내용을 볼 수 있을 것이다.

일단 LogCompilation이라는 것이 뭔지 알아야 하는데...
자바 실행시 옵션에 

-XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation 


라고 하면 XML 형태의 로그파일을 생성한다. hotspot.log라는 이름으로...
이클립스에서 실행하거나 어디에 이 파일이 생성되는지 모르면 다음과 같이 지정하면 된다.

-XX:LogFile=/develop/ztemp/logcompile.xml


당근 /develop/ztemp 라는 디렉터리가 있어야 잘 되겠죠?

이렇게 세가지 옵션을 지정하고 자바 애플리케이션을 실행하면 XML 타입의 로그가 쌓인다.

이 XML 분석방법은 일단 나중에 ...
http://wikis.sun.com/display/HotSpotInternals/LogCompilation+tool
에 보면 logc.jar가 만들어 진다는데, 뭘 해야 만들어지는지 아직 모르겠음. - -;
 
소스 코드에서 그냥 make 실행하면 logc.jar파일이 만들어지긴 하는데 parsing이 잘 안된다.

이거 괜히 알았다가 산넘어 산이다. 
Posted by tuning-java
,
http://blogs.sun.com/jonthecollector/entry/did_you_know

내가 알고 있는 단계 보다 더 복잡하구나~~~

 
Posted by tuning-java
,
답은 아래 링크에 있는데...
http://download.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html 

아래의 글도 읽어보면 도움이 될 것입니다.
http://forward.com.au/javaProgramming/HowToStopAThread.html

그런데, 이게 최선입니까?
확실해요? 
Posted by tuning-java
,
Attach API 에 대해서 정리된 글...

http://www.javaworld.com/community/node/470 

잘 살펴봐야 하는데 시간이 없넹~~~ 
Posted by tuning-java
,
자바에는 Attach API라는 것이 있다.

이게 뭐냐면,
현재 떠 있는 JVM에 붙어서 뭔가 작업을 하는 것을 도와주는 API다. 
패키지가
com.sun.tools.attach 로 시작하기 때문에,
일반 자바 API 문서에는 링크가 없다.
대신 javadoc/jdk/api/attach/spec/index.html 을 보면 된다.

자세한 설명은 아래 링크를 참조하면 좀 이해가 될 듯...
http://www.javaworld.com/community/node/470 

 
Posted by tuning-java
,
가끔가다 JDK 소스를 보고 싶을 때가 있는데,
기본적으로 JDK를 설치하면 Java 소스들만 제공된다.

실제 C 레벨까지의 소스를 보려면 아래 링크에서 원하는 버전을 선택해서 보면 된다.

http://download.java.net/jdk6/6u10/archive/
Posted by tuning-java
,
원문 출처 : http://www.yourkit.com/docs/95/help/sizes.jsp

번역 : 내가 했음. ㅎㅎ

Shallow size of an object is the amount of memory allocated to store the object itself, not taking into account the referenced objects. Shallow size of a regular (non-array) object depends on the number and types of its fields. Shallow size of an array depends on the array length and the type of its elements (objects, primitive types). Shallow size of a set of objects represents the sum of shallow sizes of all objects in the set.

객체의 Shallow 크기라는 것은 객체 자체가 저장되는 메모리의 양을 말하며, 참조되는 객체가 포함되지 않은다. 배열이 아닌 Shallow 크기는 해당 객체가 갖고 있는 필드의 갯수와 타입에 따라 달라진다. 배열의 Shallow 크기는 배열의 길이와 요소(객체, 기본자료형)의 타입에 의존적이다. 객체의 집합(set)에 대한 Shallow 크기는 해당 집합(set)에 있는 모든 객체의 Shallow 크기의 합을 말한다. 

Retained size of an object is its shallow size plus the shallow sizes of the objects that are accessible, directly or indirectly, only from this object. In other words, the retained size represents the amount of memory that will be freed by the garbage collector when this object is collected.

Retained 크기는 Shallow 크기 + 해당 객체에서만 직/간접적으로 접근 가능한 객체들의 shallow 크기를 말한다. 다시 말해서, retained 크기는 가비지 컬렉터에 의해서 해당 객체가 제거될 때 사라지는 메모리의 크기를 나타낸다. 

To better understand the notion of the retained size, let us look at the following examples:

retained size에 대한 보다 더 자세한 이해를 위해서 다음의 예제를 살펴보자.

In order to measure the retained sizes, all objects in memory are treated as nodes of a graph where its edges represent references from objects to objects. There are also special nodes - GC root objects, which will not be collected by Garbage Collector at the time of measuring (read more about GC roots).

retained size를 측정하기 위해서는, 메모리에 있는 모든 객체들은 그래프의 노드로 간주되며, 그것들의 edge는 객체들에서 객체들로의 참조를 나타낸다. 여기에 특별한 노드가 있는데, 이는 GC root 객체이며 이것은 측정 당시에 가비지 컬렉터에 의해서 처리되지 않는다. 

The pictures below show the same set of objects, but with varying internal references.

아래 그림을 보면 돌일한 set을 가지는 객체들이며, 내부적인 참조는 다른 상황이다.

Figure 1:
Figure 2:

Let us consider obj1.
As you can see, in both pictures we have highlighted all of the objects that are directly or indirectly accessed only by obj1. If you look at Figure 1, you will see that obj3 is not highlighted, because it is also referenced by a GC root object. On Figure 2, however, it is already included into the retained set, unlike obj5, which is still referenced byGC root.

obj1을 생각해보자.
여러분들이 볼 수 있듯이, 두 그림에서 색칠되어 있는 객체들은 obj1에서만 직/간접적으로 접근가능하다. 그림 1에서는 obj3이 색칠되어 있지 않은 것을 볼수 있다. 왜냐하면 해당 객체는 GC root 객체에서 참조하고 있기 때문이다. 그림 2에서는 obj3이 retained set에 포함되어 있다. obj5는 아직도 GC Root에서 참조하고 있는 것을 볼 수 있다.

Thus, the retained size of obj1 will represent the following respective values:

  • For Figure 1: the sum of shallow sizes of obj1obj2 and obj4
  • For Figure 2: the sum of shallow sizes of obj1obj2obj3 and obj4

따라서  obj1의 retained size는 다음의 값들을 나타낸다.
  • 그림 1 : obj1,2,4의 shallow size의 합
  • 그림 2 : obj1,2,3,4의 shallow size의 합


Looking at obj2, however, we see that its retained size in the above cases will be:

  • For Figure 1: the sum of shallow sizes of obj2 and obj4
  • For Figure 2: the sum of shallow sizes of obj2obj3 and obj4

obj2를 보자. 이 객체의 retained 크기는 
  • 그림 1 : obj2, 4의 shallow size의 합
  • 그림 2 : obj2,3,4의 shallow size의 합

In general, retained size is an integral measure, which helps to understand the structure (clusterization) of memory and the dependences between object subgraphs, as well as find potential roots of those subgraphs.

일반적으로 retained size는 integral 한 측정이며, 메모리의 구조와 객체 하위 그래프의 의존관계를 이해하는데 도움이 된다. 그리고 이러한 하위 그래프의 잠재적인 root를 찾을 수 있다.  


Posted by tuning-java
,
http://www.briangoetz.com/pubs.html

2006년에 발간된 Java Concurrency in Practice라는 책의 블로그이다.

자바에 대한 매우 많은 유용한 문서들을 많이 작성했다.

한번 들어가서 내용들을 보시길...

애기 돌잔치한다고 11월을 바삐 지냈더니 벌써 중순.
예전에 짱박아 놨던 글 하나 포스팅... ㅋㅋ
Posted by tuning-java
,
http://blogs.sun.com/watt/resource/jvm-options-list.html

해당 문서의 리비전상으로는 좀 된 상태이지만,
내가 지금까지 본 문서중 GC 옵션에 대해서 가장 정리가 잘 되어 있는 페이지다.


Posted by tuning-java
,
IBM 디벨롭터 웍에 좋은 글이 있어서 링크를...
글이 두개인데, 파트1은 한글, 파트2는 영어다.
제목은 "java.util.concurrent에 대해 모르고 있던 5가지 사항"

링크를 보다보니 다른 글도 있을 것 같아서 뒤져보니 다음과 같은 글들이 있다. ^^;

Java Collections API에 대해 모르고 있던 5가지 사항, Part 1
Java Collections API에 대해 모르고 있던 5가지 사항, Part 2

그 밖에 아직 번역안된 영어글들
5 things you didn't know about ... JARs

5 things you didn't know about ... Java performance monitoring, Part 1
(요 내용은 didn't know는 아닌듯 ㅋㅋ. 특히나 내책을 본 사람들에게는 ㅎㅎㅎ)
아직 8번째 글은 안썼나부다.
Posted by tuning-java
,
http://www.infoq.com/presentations/Diagnosing-Memory-Leaks

링크에 있는 자료를 보면 자바 메모리릭에 대한 좋은 정보를 얻을 수 있다.

화면의 상단에 있는 동영상을 수행하면, 중앙에 있는 슬라이드가 바뀌면서 보인다.

여기서 보여주는 자료를 다운로드할 수만 있다면 좋으련만...
Posted by tuning-java
,
OpenJDK에 대해서 들어본 개발자도 있겠지만,
처음 들어본 자바 개발자도 있을 것이다.


이게 뭔지 그나마 자세히 번역해 놓은 블로그 : http://thebasis.tistory.com/62

문제는 정말 써도 되는가이다. 

일단~~~ BMT 함 해 보고...
Posted by tuning-java
,
지난주에 회사에서 "GC 튜닝의 이해"라는 과정을 개설해서,
강의를 했다. 

강의 자료를 만들고 있는데,
도대체 자바의 Permanent 영역에는 정확히 어떤 놈들이 있는 것일까?
라는 의문이 생겨서 여기저기 찾아 보다가, 가장 정리가 잘 되어 있는 놈을 발견했다.

궁금하신 분들은 아래 글을 읽어보기 바란다.
http://blogs.sun.com/jonthecollector/entry/presenting_the_permanent_generation

Posted by tuning-java
,
업무상 필요해서,
자바를 이용해서 PDF 파일을 만드는 라이브러리를 찾아 보았다.

그 중 가장 많이 쓰이고, 적당한 라이브러리로 iText를 찾았고,
해당 라이브러리는 주기적으로 update 되는 것으로 보인다.

iText 홈 : http://www.lowagie.com/iText

한글로 설명 되어 있는 문서 : http://www.ibm.com/developerworks/kr/library/os-javapdf/index.html

iText in action 책의 sample sources : http://www.1t3xt.info/examples/itext-in-action.php


가장 좋은 방법은 한글 문서를 본 후 iText in action 책에 있는 샘플 소스를 참조하는 방법이다.

한글이 깨지는 문제가 있다고 하는데,
그 내용은 구글에서 "iText 한글"로 찾으면 많은 블로그 링크를 찾을 수 있을 것이다.
Posted by tuning-java
,
http://developers.sun.com/learning/javaoneonline/j1online.jsp?track=javase&yr=2009

Java One 2009 자료들이 떴다.
이 자료들을 보려면 SDN 계정이 있어야만 한다.
(대부분 아시겠지만, 이 계정은 무료다. ^^)

지난 몇년간 성능테스트만 하고,
튜닝 업무는 주가 아닌 부 작업이 되었을 때 자료들을 보는 것과
지금 튜닝 업무가 주요 작업인 지금 자료들을 보는 것은 천지차이다.

역시 어떤 자료던지,
자기한테 필요가 있어야만 처다보게 되고,
머리에 쏙쏙 들어온다는 거~~~.

그나 저나 팀장님이 도움이 될꺼 같냐고 물어봤을때,
강력하게 이야기할 걸 그랬다.

내년엔 경기도 좋아지고,
팀도 계속 남아있고,
Java One 2010도 꼭 해서,
한번 참석해보고 싶당...
(회삿돈으로... ㅋㅋㅋ)
Posted by tuning-java
,