method Inlining (JVM)

java core 2008. 11. 11. 02:30

출처

http://java.sun.com/developer/technicalArticles/Networking/HotSpot/inlining.html

 

JVM에서 메소드 인라이닝이란, JVM이 메소드를 바로 호출하지 않고, 바로 그 자리에 리턴된 상수값또는 메소드를 넣어서 최대한 속도를 높이는 것을 말한다.

 

특징은 다음과 같다.

 

  • 메소드 콜이 없어서 부하를 낮춘다. No method call
  • 다이나믹 디스패치가 없다. No dynamic dispatch
  • 상수값이 주어지도록 한다. Possible to constant-fold the value, eg. "a.foo()+2" becomes 5 with no code executed at runtime.
  •  

    과거에는 final을 추가하여 inlining이 하도록 지시하게 하여 속도를 최대한 높일 수 있도록 하였다는 점이 주목적이다.

    (임베디드에서는 final이 필수적이다. 속도 빠르게 해야 와따니까.)

    하지만, 이런 테크닉이 모듈화에 적잖이 부담을 줄 수도 있다.

     

    그런데 말이지. HotSpot JVM은 final로 선언하지 않아도 알아서 inlining이 가능하다.

     

    모든 클래스들이 로딩할때마다 inlining을 하다가, 체크를 해보고 아니다 싶으면, 다시 도로 푸는 작업을 한다고 한다. deoptimized를 한다고 표현하고 있다.

     

     

    On every class load, all these assumptions are checked and, if violated, the now-incorrect compiled code is retired (deoptimized).

    Posted by 김용환 '김용환'

    댓글을 달아 주세요

    ipcs

    unix and linux 2008. 11. 7. 20:40

    IPC(Inter Process Communication)는 message queue( q), shared mem ( m), semaphore (s)의 자원의 현황을 알려준다.

     

    ipcs -l 을 사용하였다.

     


    ------ Shared Memory Limits --------
    max number of segments = 4096
    max seg size (kbytes) = 1048576
    max total shared memory (kbytes) = 8388608
    min seg size (bytes) = 1

    ------ Semaphore Limits --------
    max number of arrays = 128
    max semaphores per array = 250
    max semaphores system wide = 32000
    max ops per semop call = 32
    semaphore max value = 32767

    ------ Messages: Limits --------
    max queues system wide = 16
    max size of message (bytes) = 8192
    default max size of queue (bytes) = 16384

     

     

    ipcs 만 치면 이렇게 나온다.

     

    ------ Shared Memory Segments --------
    key        shmid      owner      perms      bytes      nattch     status     

    ------ Semaphore Arrays --------
    key        semid      owner      perms      nsems    
    0x00000000 3964928    www       600        1        
    0x00000000 3997697    www       600        1        
    0x00000000 4030466    www       600        1        
    0x00000000 4063235    www       600        1        
    0x00000000 4096004    www       600        1        

    ------ Message Queues --------
    key        msqid      owner      perms      used-bytes   messages   

     

    자원을 삭제할 때는 ipcrm 라는 명령어를 사용하면 된다.

     

    왜 이런 것이 필요할까?

     

    그것은 특정 프로세스가 가지고 있던 자원들을 해제하지 않으면서 생긴 문제를 해결하기 위함이다.

    예를 들어 DBMS에 대해서 kill을 했지만, IPC 자원을 해제않는 경우를 확인할 수 있고, 이를 통해서 자원이 낭비되고, 이런식으로 계속 문제가 되면, 시스템 전체에 영향을 미칠 수 있기 때문이다.

     

    예를 들어 apache 데몬의 경우 restart를 했는데, 다음과 같이 세마포를 계속 가지고 있을 수 있다.

     

    ------ Semaphore Arrays --------
    key        semid      owner      perms      nsems    
    0x00000000 13434880   www       600        1        
    0x00000000 13467649   www       600        1        
    0x00000000 13500418   www       600        1        
    0x00000000 13533187   www       600        1        
    0x00000000 13565956   www       600        1 

    ....

    ....

    ....

     

     

     

    그러면,

    ipcs -s |sed "/em/d" | for i in `awk '{print $2}'` ; do ipcrm sem $i ; done

     

    이 명령어를 통해서 싹 정리하면 좋다.

     

     

    'unix and linux' 카테고리의 다른 글

    쉘 에러 bad interpreter:  (0) 2008.12.12
    /etc/sudoers  (0) 2008.11.19
    ipcs  (0) 2008.11.07
    파일 길이가 큰 파일 옮기기 (split를 이용하여 리눅스 파일 나누기 합치기)  (0) 2008.06.26
    bash 문자열 조작  (0) 2008.06.20
    고급 Bash 스크립팅 가이드  (0) 2008.06.20
    Posted by 김용환 '김용환'

    댓글을 달아 주세요

    http://www.fis.unipr.it/pub/linux/redhat/9/en/doc/RH-DOCS/rhl-cg-ko-9/s1-secureserver-selfsigned.html

     

    가짜 인증서를 통해서 https 서버 만들기

    Posted by 김용환 '김용환'
    TAG 영화

    댓글을 달아 주세요

    강동구(천호동, 암사동, 성내동, 명일동, 상일동, 하일동, 둔촌동, 고덕동, 길동)

    송파구(풍납동, 석촌동, 삼전동, 잠실동, 가락동, 거여동, 마천동, 문정동, 방이동, 삼전동, 석촌동, ·송파동· 오금동, 잠실동, 장지동, 풍납동)

     

    강동구 송파구 일대 집수리 추천 가계 알려드립니다.

    사장님이 아버지또래 되시고, 친절하고, 잘 해주시네요.

     

    가게 : 태일 설비

    위치 : 암사동

    사장님 전화번호 : 019 - 285 - 4105

    Posted by 김용환 '김용환'
    TAG 영화

    댓글을 달아 주세요

    CPAN 이용하기

    perl 2008. 9. 27. 03:28

    1. cpan 싸이트에서 검색해서 다운로드

     

     

    2. 리눅스에서 다음의 명령어 사용

    perl -MCPAN -e 'shell'

     

    쉘에서 다음과 같이 사용
    install DBD::mysql


     

    Posted by 김용환 '김용환'

    댓글을 달아 주세요

    count별로 sort

    DB 2008. 9. 24. 20:53

    샘플 예제

    count 갯수별로 호출된 메뉴 수를 보여주게 하기.

     

    mysql> select count(*)  cnt, menu, menuname from lgt where date>='2008-06-24' group by menu,menuname order by cnt desc  into outfile '/tmp/result7.txt';

     

     

    Posted by 김용환 '김용환'
    TAG 영화, 음악

    댓글을 달아 주세요

    교통카드 할인과 다양한 혜택이 있었던 하나 마이웨이 카드..

     

     

    2008년 5월 31일부로 크라제 버거 할인 혜택 종료.

    2008년 12월 22일부로 변경

    1. 사용실적 변경

    From

      - 이용시점 기준 최근 3개월간 사용금액 30만원 이상일 경우

    T0

     - 이용시점 기준 전월 1일~말일까지 사요금액 30만원이상일 경우

    2. 홈에버 할인 종료

     

    흑... 하나카드 하나씩 사라지는 구나~

    Posted by 김용환 '김용환'

    댓글을 달아 주세요

    메모리 덤프 뜨기

    java core 2008. 9. 23. 01:07

    메모리 덤프하기

     

    1.     옵션 추가

    Catalina.sh에 우선 이 옵션을 사용한다.  Depth 15로 잡으면, 메모리 인스턴스의 reference또는 상속관계를 15단계까지 포함한다는 내용

    -agentlib:hprof=heap=dump,file=cms.txt,depth=15

      

    2.     아파치 스톱 : 더 이상 아파치 요청이 들어오지 않도록 함, 메모리 덤프시에는 서비스를 정상적으로 처리를 못함

    apachctl stop

     

    3.     메모리 덤프

    kill -3 java프로세스id

    => 바이너리 메모리 덤프, signal을 보내면 메모리를 cms.txt에 저장

     

    4.     /usr/local/tomcat/lucy8080/bin cms.txt 메모리 덤프파일을 확인, 더 이상 파일 크기가 커지지 않으면, 메모리 덤프 완료.

    보통, 메모리 싸이트가 200m이상일 때 덤프를 뜲.

    너무 많이 쌓인 상태에서는 파일 디스크나 오류로 인해서 정상적인 메모리 덤프가 안될 수도 있음. 너무 데이터량이 적으면, 분석하기 어려움. 적당하게 판단할 필요 있음

    'java core' 카테고리의 다른 글

    FreeMarker 바로 간단 사용하기  (0) 2008.12.31
    method Inlining (JVM)  (0) 2008.11.11
    메모리 덤프 뜨기  (0) 2008.09.23
    자바 튜닝 관련  (0) 2008.08.27
    자바 Security 알고리즘 보기  (0) 2008.06.20
    jdk 6 update 6 Release Notes  (0) 2008.05.30
    Posted by 김용환 '김용환'

    댓글을 달아 주세요

     

    Linux에서의 /etc/sudoers 수정하여 특정 사용자에게 패스워드 실행시키기

    우선 이 파일에서는 mask가 잡혀 있고, /etc/sudoers에 chattr로 해서 함부로 수정이 안가게 해놓은 상태이다.

    www 계정에 대해서 sudo 수행시 패스워드 입력 없이 ifdown,ifup을 사용할 수 있도록 조치하였다.

     

     

     


    chattr -i /etc/sudoers
    chmod u+w /etc/sudoers

     

    echo "Defaults:www !authenticate" >> /etc/sudoers
    echo "Cmnd_Alias IFUPDOWN=/sbin/ifup,/sbin/ifdown" >> /etc/sudoers
    echo "www ALL=IFUPDOWN:ALL=/sbin/swapon" >> /etc/sudoers

     

    chmod u-w /etc/sudoers
    chattr +i /etc/sudoers

    Posted by 김용환 '김용환'

    댓글을 달아 주세요