'Java'에 해당되는 글 53건

  1. 2012/01/30 [Java GC] 자바의 Perm 영역에서도 GC가 일어날까? (4)
  2. 2011/10/14 [자바 애플릿] 애플릿에서 사용하는 메모리 크기 증가시키기
  3. 2011/09/01 [Java Spec] JVM Spec과 Java Language Spec 문서 업데이트
  4. 2011/07/21 [자바 메모리 모니터링] JVM에서 사용하는 전체 메모리를 모니터링하는 방법
  5. 2011/07/05 [Java GC] GC가 성능에 미치는 영향에 대한 고찰 -링크
  6. 2011/05/03 [LogCompilation] 자바의 JIT가 어떻게 컴파일이 되는지 보고 싶다면...
  7. 2011/04/01 [GC] CMS 사용시 verbosegc 분석하는데 도움이 되는 자료
  8. 2011/03/29 [Java Basic] 왜 Thread의 stop 메소드는 deprecated 되었을까?
  9. 2011/03/28 [Advanced Java] Attach API
  10. 2011/03/21 [링크] Java Attach API
  11. 2010/12/23 [Java source] 자바 소스 목록
  12. 2010/12/21 [자바 객체의 크기] Shallow size와 Retained size
  13. 2010/11/15 Java Concurrency in Practice 저자의 블로그
  14. 2010/08/09 [Java GC Options] 버전별 GC 옵션이 잘 정리되어 있는 페이지
  15. 2010/06/30 [Java Concurrent] 일반적으로 모르는 자바에 대한 사실들
  16. 2010/05/28 [자바 메모리 릭] Memory leak에 대한 좋은 자료
  17. 2010/01/19 [OpenJDK] OpenJDK에 대하여 (2)
  18. 2009/12/22 [자바 GC] 도대체 Permanent 영역에는 어떤 놈들이 있는 것일까?
  19. 2009/12/22 [Java PDF] 자바로 PDF 파일을 만들어 주는 iText 라이브러리
  20. 2009/06/16 [JavaOne 2009] 자바원 2009 세미나 자료들
  21. 2009/06/05 [GC] 자바의 CMS(Concurrent Mark & Sweep)을 대체할 G1
  22. 2009/05/25 [GC] Java GC Tuning 방법 (자바 메모리 튜닝)
  23. 2009/04/10 [Java Performance Tips] 자바 성능 팁
  24. 2009/03/11 [정규 표현식 분석기] 웹 기반의 정규 표현식 분석기 (2)
  25. 2009/03/09 [자바 스택정보 보기] jstack을 이용해서 스택정보(쓰레드 덤프, Thread dump) 확인
  26. 2009/03/06 한빛 미디어 도서를 이용한 Java Roadmap
  27. 2009/02/25 [Garbage First] G1 콜렉터란 ??? (2)
  28. 2009/02/19 [NetBeans 성능 튜닝 관련 링크 모음] 넷빈즈 사이트에서 제공하는 성능 관련 링크들
  29. 2009/02/19 [자바 메모리 옵션 튜닝] Sun 에서 제공하는 자바 메모리 옵션 튜닝
  30. 2009/02/11 [Java Runtime] Java Runtime.exec() 메소드가 잘 안돌아 갈 때 (CreateProcess error=2 발생)
내가 기고한 어떤 글에 어느 분께서 질문을 올려서 여기에 정리한다.
질문의 골자는 "다른분께서 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 크기가 출력된다.
 
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 4
http://www.webmo.net/support/java_memory.html

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

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

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

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

영어인건 다 아시죠?  
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
회사 동료분이 공유해 주신 자료가 있어 그 링크를 적어놓는다.

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

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

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

 
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
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/

 
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
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이 잘 안된다.

이거 괜히 알았다가 산넘어 산이다. 
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
http://blogs.sun.com/jonthecollector/entry/did_you_know

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

 
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
답은 아래 링크에 있는데...
http://download.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html 

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

그런데, 이게 최선입니까?
확실해요? 
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
Attach API 에 대해서 정리된 글...

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

잘 살펴봐야 하는데 시간이 없넹~~~ 
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
자바에는 Attach API라는 것이 있다.

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

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

 
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
가끔가다 JDK 소스를 보고 싶을 때가 있는데,
기본적으로 JDK를 설치하면 Java 소스들만 제공된다.

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

http://download.java.net/jdk6/6u10/archive/
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
원문 출처 : 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를 찾을 수 있다.  


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
http://www.briangoetz.com/pubs.html

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

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

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

애기 돌잔치한다고 11월을 바삐 지냈더니 벌써 중순.
예전에 짱박아 놨던 글 하나 포스팅... ㅋㅋ
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
http://blogs.sun.com/watt/resource/jvm-options-list.html

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


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
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번째 글은 안썼나부다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
http://www.infoq.com/presentations/Diagnosing-Memory-Leaks

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

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

여기서 보여주는 자료를 다운로드할 수만 있다면 좋으련만...
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
OpenJDK에 대해서 들어본 개발자도 있겠지만,
처음 들어본 자바 개발자도 있을 것이다.


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

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

일단~~~ BMT 함 해 보고...
크리에이티브 커먼즈 라이선스
Creative Commons License

'Java > OpenJDK' 카테고리의 다른 글

[OpenJDK] OpenJDK에 대하여  (2) 2010/01/19
Posted by tuning-java Trackback 0 : Comment 2
지난주에 회사에서 "GC 튜닝의 이해"라는 과정을 개설해서,
강의를 했다. 

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

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

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
업무상 필요해서,
자바를 이용해서 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 한글"로 찾으면 많은 블로그 링크를 찾을 수 있을 것이다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
http://developers.sun.com/learning/javaoneonline/j1online.jsp?track=javase&yr=2009

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

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

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

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

내년엔 경기도 좋아지고,
팀도 계속 남아있고,
Java One 2010도 꼭 해서,
한번 참석해보고 싶당...
(회삿돈으로... ㅋㅋㅋ)
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
자바의 GC 방식에는 여러가지가 있지만,
최근에 나온 기술에는 G1이라는 것이 있다.
최근에 나온 JDK 6.0 update 14에는 early access 로 G1을 사용할 수 있도록 했다.
G1을 적용하기 위해서는 java start option에
-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC
라고 명시해 주면 된다.

추가로 G1을 사용할 때 GC로 인한 최대 대기시간을 지정하기 위한
-XX:MaxGCPauseMillis=<X>
옵션을 추가할 수 있으며,
-XX:GCPauseIntervalMillis=<X>
옵션을 통해서 GC 대기 사이의 간격을 지정할 수 있다.
그런데 여기서 중요한 것은
이 옵션은 Goal 이다. Promise나 guarantee 가 아니라는 것이다.
(목표일 뿐이고, 이건 약속이나 보장한다는 것이 아닐 뿐이고~~)

G1이 다른 GC와 다른 것은 GC를 담당하는 New와 Old의 장벽이 사라졌다는 것~~~
자세한건 아래 링크의 비됴나 문서를 함 보시길~~~

Sun Tech Days 2008-2009 자료 보기
http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-5419&yr=2008&track=javase


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by tuning-java Trackback 0 : Comment 0
GC가 뭔지 잘 모르시는 분들은 제 블로그의 다른 글을 찾아보시거나,
"자바 성능을 결정 짓는 코딩 습관과 튜닝 이야기"를 참조하시길...

자바의 메모리 구조는 다음과 같이 되어 있다.
  • Code Cache: contains memory used for compilation and storage of native code
  • Eden Space: pool from which memory is initially allocated for most objects
  • Survivor Space: pool containing objects that have survived Eden space garbage collection
  • Tenured Gen: pool containing long-lived objects
  • Perm Gen: contains reflective data of the JVM itself, including class and memory objects
  • Perm Gen [shared-ro]: read-only reflective data
  • Perm Gen [shared-rw]: read-write reflective data

    아래는 GC를 어떻게 튜닝하는지에 대한 자세한 설명이 있는 사이트 링크다.
    http://java-monitor.com/forum/showthread.php?t=30

    이것도 귀찮은 분을 위해서 더 간단한 튜닝 정보
    http://developer.amd.com/documentation/articles/pages/4EasyWaystodoJavaGarbageCollectionTuning.aspx

    완벽한 GC의 방식과 처리에 대한 자세한 정보를 보려면 아래 링크에 있는 PDF 파일을 참조하는 것도 좋다.
    http://www.cecmg.de/doc/tagung_2007/agenda07/24-mai/2b3-peter-johnson/index.html


    한글로 된 설명을 보고자 하신다면
    다시한번 말씀드리지만,
    "자바 성능을 결정 짓는 코딩 습관과 튜닝 이야기"를 참조하시길...
    지금 생각해보면 이 책에 이 부분에 대한 설명을 좀 약하게 적었다는 생각이 많이 들긴 한다.
    다음책에선 자세히 적어놔야지...

    추가로 Java 6 GC 튜닝 방법에 대한 Sun의 자료는 아래와 같다.
    http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

  • 크리에이티브 커먼즈 라이선스
    Creative Commons License
    Posted by tuning-java Trackback 0 : Comment 0
    오늘 팀장님께서 복사한 문서를 한번 읽어 보라고 주셨다.
    9개의 자바 성능 팁에 대해서 아~주 간단하게 정리되어 있는 문서다. (2페이지에 걸친...)

    그 장의 첫번째 구문에는 Michael A. Jackson 이라는 할아버지가 쓴 글귀가 있다.

    The First Rule of Optimization : Don't do it
    The Second Rule of Optimization (for experts only) : Don't do it yet.

    이 문서가 언제 쓴 문서인지는 모르겠지만.... 이 글귀는 약간 이해는 안된다. ^^;

    Tip #1 : Object creation is bad
    Tip #2 : static is good  ==> I don't think so 다.
    Tip #3 : Table switch good, lookup switch bad
    Tip #4 : Small methods are good methods
    Tip #5 : Exceptions are exceptional
    Tip #6 : Use decorator patterns with care
    Tip #7 : instanceof is faster on classes
    Tip #8 : Use synchronized minimally
    Tip #9 : Beware external libraries
    크리에이티브 커먼즈 라이선스
    Creative Commons License
    Posted by tuning-java Trackback 0 : Comment 0
    http://regexp.resource.googlepages.com/analyzer.html

    웹기반의 정규 표현식을 분석해주는 툴이 있어서 소개한다.

    정규 표현식을 서비스에 적용하기 전에,
    한번정도는 체크해 주는 쎈쑤~~~
    크리에이티브 커먼즈 라이선스
    Creative Commons License
    Posted by tuning-java Trackback 0 : Comment 2

    기본적으로 자바는 Process와 Thread로 구성되어 있다.

    이게 뭔지는 Java 성능을 결정짓는 코딩 습관과 튜닝 이야기라는 책에 잘 나와 있고...


    여하튼.. 어떤 Thread가 뭔 짓을 하고 있는지를 보려면 Thread dump를 보면 된다.

    자바는 기본적으로 Thread dump를 제공하기 위해서 jstack이라는 명령어(프로그램)을 제공하며 자세한 설명이 필요한 분은 아래의 설명을 보기 바란다.

    http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstack.html

    http://java.sun.com/javase/6/docs/technotes/tools/share/jstack.html

     

    만약 JDK 버전이 5.0이면

    Jstack pid

    JDK 버전이 6.0 이면

    jstack -l pid

    명령을 수행하면 된다.


    만약 솔라리스나 리눅스에서 이 명령으로 수행이 안되면

    jstack -F pid

    로 수행하면된다.


    여기서 pid 는 프로세스의 id다.

    만약 jstack이 수행하는데 너무 오래 걸리고, 서버에 부하가 된다면 kill -3으로 쓰레드 덤프를 뜨는 것도 도움이 된다.


    분석하는 방법은 쉽지 않지만 다음과 같은 툴들이 있다.
    TDA라는 툴
    https://tda.dev.java.net/

    IBM의 JCA라는 툴

    http://www.alphaworks.ibm.com/tech/jca



    크리에이티브 커먼즈 라이선스
    Creative Commons License
    Posted by tuning-java Trackback 0 : Comment 0

    한빛미디어에서 이벤트를 한다고 하길래 한번 어떤 순서로 공부를 해야 하는지를 정리해본다.

    먼저 이벤트 관련 설문 내용

    1. 현재 하시는 일은 무엇인가요?

    글쎄요. 저도 제가 요즘 뭘 하는지... 그냥 요즘은 수명업무 하고 있습니다. 

    2. 로드맵에서 각 단계별로 같이 보면 좋은 책이 있나요?

    이 질문의 요지는 잘 모르겠지만, 같이보면 좋은 책은 같이 나열 했습니다. ^^;

    3. 로드맵에 대한 자신의 생각을 적어주세요.

    로드맵을 작성하다보니, 웹기반 시스템을 만들 개발자에겐 어느정도 도움이 되는 책들이 많으나, 서버 모듈이나 Core 모듈을 개발하는 개발자용 책은 그리 많지가 않은거 같네요.


    먼저 이벤트 페이지에 올라와 있는, 책들의 표지 목록을 보니 “엄청나게 많은 종류의 책이 출판되고 있구나” 라는 사실을 알게되었다. 그것도 IT 책만을 전문적으로 출판하는 회사에서…

    그런데, 표지 목록에 있는 책들을 보니, 이미 절판된 책도 있는 것으로 보였다. 최대한 내가 알고 있는 절판 책들은 뺐으나, 이 목록에 포함되었을 수도 있으니 이점 양해해 주기 바란다.

    추가로 이 로드맵은 웹 시스템 개발자를 위한 로드맵이고, 내 개인적인 의견이며, 사람마다 생각이 틀릴 수도 있다는 점을 이해해 주기 바란다.

     

    그럼 이제 시작한다.

    자바를 배우기 시작할 때에는 가장 먼저 자바의 기본과 알고리즘을 알아야 한다. 게다가 IDE 사용법까지…

     

    기본적인 자바에 대해서 알았다면, 웹 개발을 위한 필수인 HTML과 자바 스크립트에 대해서 알아야 한다.

     

    그리고, DB에 대해서 알아야 한다는 것은 두말할 필요도 없다.

     

    DB까지 공부했다면, 본격적으로 Java를 이용한 웹 개발 환경인 JSP, Servlet, EJB 에 대해서 알아 두자.
    (참고로 EJB는 죽었다고 생각 될 수도 있지만, EJB에서 제공하는 보안, 트랜젝션등의 관리 기술에 대해서는 알아두는 것이 나중에 정신 건강을 위해서 매우 좋다. ^^)

     

    이게 끝이라고 생각할 수도 있겠지만, 이제 시작이닷!!!

    언제까지 누가 모델링해준 것만 보고 만들것인가? 직접 자기가 모델링하고 설계할 수 있어야 한다.

    그러기 위해선 UML, CBD(이것도 한물 갔다고 생각할 수 있지만, 개념은 알아야한다.), SOA(이것에 대한 책이 한빛엔 없어보인다)등에 대해서 알아야지…

     

    보다 더 제대로 알고 개발하기 위해선, XML, 쓰레드, IO, 네트워킹, 리펙토링 정도는 공부해야 한다. 다른건 다 모르더라도 리펙토링은 반드시~~~~

     

    그 다음엔, 요즘에 많이 사용되는 프레임웍과 Web 2.0, AJAX에 대해서도 공부해야 한다.
    참고로 아래에 나와 있는 책들의 버젼은 내가 잘 모르며, 특히 프레임웍 책을 살 때에는 요즘 최신 버젼의 프레임웍인지에 대해서 잘 알아 본 후에 구입해야 한다. 버젼에 따라서 달라지는게 많아지기 때문에…

     

    그럼 이제 개발한 것을 운영 서버에서 컴파일하거나 올려야 겠죠?

    리눅스나 유닉스의 기본 명령어 정도는 알아야 한다.

     

    마지막으로 개발의 꽃인 튜닝에 대해서 공부하자.

     

    물론 나도 여기에 있는 모든 책을 읽은 것은 아니다.
    하지만, 입맛에 맞게 골라서 Java 기반의 웹 개발에 대한 기본을 튼튼히 다지자.

    크리에이티브 커먼즈 라이선스
    Creative Commons License
    Posted by tuning-java Trackback 0 : Comment 0

    http://java.sun.com/javaone/sf/2008/articles/rockstar_tonyprintezis.jsp

    먼저 위의 인터뷰 내용을 읽어보자.
    Garbage First Collector가 뭔지 대충 감을 잡을 것이다.

    분명 대부분 안읽어 보시겠지만....적어도 아래 줄들은 일어 주기 바란다.
    G1=next-generation low-pause garbage collector
    G1 will ultimately replace the Concurrent Mark-Sweep (CMS) garbage collector
    G1, even though it is generational, there is no physical separation between the two generations.

    Three Objectives of G1
    The first objective is consistent low pauses over time.
    The second objective is to avoid, as much as possible, having a full GC.
    The final objective is good throughput.


    if you care about getting the job done as quickly as possible, and don't care much for how long your application is going to be stopped by the garbage collector, the throughput collector is the best choice.

    if you have a batch job that is going to take a few minutes or a few hours and you want it to be done as quickly as possible, then a throughput collector is clearly the best choice.

    But, if you are working on a very interactive job that needs to interact with people, other applications, or users through web pages, then a low latency garbage collector is the best choice.


    Why does garbage collection take so long? ==> Garbage collection is very memory-bound. And memory speeds these days are quite slow compared to CPU speeds

    글 중간에는 다음의 내용을 읽어보라고 이야기한다.
    GC와 친해지는 코딩 방법
    http://developers.sun.com/learning/javaoneonline/2007/pdf/TS-2906.pdf

    그리고, 저 이너뷰 한 사람이 사진을 잘 찍는가본데, 사진과 개발과의 상관관계를 아래와 같이 이야기 했다.
    You need to be committed and to be patient and try out things again and again, to make sure that you get it just right. I see some parallels between photography and development.

    마지막엔 그가 이야기하는 아름다운 코드란....
    Beautiful code is code that is simple, easy to understand, and efficient
    란다.

    더 자세한 내용을 보시려면 아래의 영어지만, 쉽지 않은 용어로 되어 있는 문서를 참조하기 바란다.
    http://research.sun.com/jtech/pubs/04-g1-paper-ismm.pdf

    참고로 G1은 JDK 7 부터 추가된단다.
    그리고, early access 로 JDK 1.6.1에서 추가 되었다.
    http://www.tuning-java.com/272

    크리에이티브 커먼즈 라이선스
    Creative Commons License
    Posted by tuning-java Trackback 0 : Comment 2
    http://performance.netbeans.org/

    근데 이 글들은 NetBeans를 보다 빨리 사용하기 위한 설명들인감?
    크리에이티브 커먼즈 라이선스
    Creative Commons License
    Posted by tuning-java Trackback 0 : Comment 0

    http://java.sun.com/performance/reference/whitepapers/tuning.html

    썬에서 제공하는 자바 튜닝 whitepaper

    물론 JVM 옵션 튜닝만 한다고 해서 답은 안나오겠지만,
    튜닝할게 더이상 없다면, JVM 버젼 upgrade 및 옵션 튜닝을 해야 할 것이다.

    아래는 이 글의 목차다.

    뭐 다 읽기 귀찮으신 분들은 4.2 부터 적용해 보시면 된다.

    1   Introduction

    1.1   Goals
    1.2   This is a Living Document
    1.3   How to Use this White Paper

    2   Best Practices

    2.1   Use the most recent Java™ release
    2.2   Get the latest Java™ update release
    2.3   Insure your operating system patches are up-to-date
    2.4   Eliminate variability

    3   Making Decisions from Data

    3.1   Beware of Microbenchmarks!
    3.2   Use Statistics
    3.3   Use a benchmark harness

    4   Tuning Ideas

    4.1   General Tuning Guidelines

    4.1.1   Be Aware of Ergonomics Settings
    4.1.2   Heap Sizing
    4.1.3   Garbage Collector Policy
    4.1.4   Other Tuning Parameters

    4.2   Tuning Examples

    4.2.1   Tuning Example 1: Tuning for Throughput
    4.2.2   Tuning Example 2: Try the parallel old generation collector
    4.2.3   Tuning Example 3: Try 256 MB pages
    4.2.4   Tuning Example 4: Try -XX:+AggressiveOpts
    4.2.5   Tuning Example 5: Try Biased Locking
    4.2.6   Tuning Example 6: Tuning for low pause times and high throughput
    4.2.7   Tuning Example 7: Try AggressiveOpts for low pause times and high throughput

    5   Monitoring and Profiling

    5.1   Monitoring
    5.2   Profiling

    6   Coding for Performance
    7   Pointers
    8   Feedback and the Java Performance Community

    8.1   Feedback
    8.2   Java Performance Community

    크리에이티브 커먼즈 라이선스
    Creative Commons License
    Posted by tuning-java Trackback 0 : Comment 0
    Java의 Runtime이라는 클래스가 있다.

    이 클래스를 사용하면, shell script 던지, exe 파일이던 어떤 실행파일이라도
    자바 JVM에서 실행시킬 수 있다.

    그런데, 정상적으로 잘 실행되면 걱정이 없는데,
    CreateProcess error=2
    를 떨어뜨리면서 실행이 가끔 안될 때가 있다.

    그럴땐 아래의 링크를 참조해서 해결하기 바란다.

    http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1
    크리에이티브 커먼즈 라이선스
    Creative Commons License
    Posted by tuning-java Trackback 0 : Comment 0