[ java ] in KIDS 글 쓴 이(By): iknowyou (Coffeeman) 날 짜 (Date): 2000년 9월 10일 일요일 오전 12시 15분 03초 제 목(Title): Re: GUI가 속도가 느린 이유가 뭐에요? 자바가 느려보이는 이유. 1. 실행 코드를 메모리에 적재하기 전에 byte code verification을 수행한다. 이 부분은 인터넷에서 바이러스같은 위험성을 가지는 코드의 배포를 막는 안정성과 네트워크에서 코드가 이동하면서 생기는 훼손등을 실행 시키기 전에 막는 안정성에 대한 댓가 인데, 사실 초기에 자바 애플리케이션을 실행해서 사용자가 실행되는 구나를 느끼는 시간을 가장 많이 잡는 듯합니다. 2. 동적 링킹을 위한 실행 파일 포멧 실행 파일 포멧 명세서를 보면 다른 기존의 네이티브 실행 파일 포멧(PE, ELF, COFF, ...)과 비교할 때 상당히 성능을 떨어뜨리는 요소가 됩니다. 네이티브 실행 파일 포멧은 파일의 내용이 거의 그대로 메모리에 맵핑됩니다.(최적화된 운영체제에서는 가상 메모리를 이용해 실행 코드 자체가 물리적 메모리에 적재되는 것은 사실 CPU에서 그 부분을 실행할 때입니다.) 반면에 자바의 경우는 앞서 말한대로 byte code verification 을 수행한뒤에 파일 포멧에 있는 내용을 해석해 type정보(class, interface,멤버 , 자상함수 테이블)를 갱신한후 code를 메모리에 넣게 됩니다. 이 동적링킹은 유연성(클래스간에멤버가 추가 되어도 문제 없이 실행됨)과 lazy식의 코드 적재(Active Use가 있어야 코드를 적재)를 재공하지만 다른 실행파일 포멧에 비해 초기 boostup 속도를 느리게 합니다. 3. 미들웨어로서의 성격 자바 실행 환경은 CPU, OS를 추상화 시킨 것이므로 미들웨어로서의 성격을 가지고 있습니다. 바이트 코드를 이용해서 CPU를 추상화 시켜고, 네이티브 코드와 동적 링킹를 통해서 OS를 추상화 시켰습니다. 예를 들어, GUI에서 Window를 생성하는 경우는 Java 인터프리터(JVM.dll), AWT byte code(java.awt, ...) AWT porting byte code(sun.awt.window, ...), awt native code(awt.dll), windows stub(user32.dll, gui32.dll) 등 수많은 코드를이 메모리 상에 필요합니다. 4. 결론 자바 기술 자체가 초기 정상상태로가는 속도가 느리게 설계되어 있는 측면이 있습니다. 그러나 지금 같은 컴퓨팅 능력의 항상되는 속도를 볼 때에 속도는 문제가 덜되어 가고 있다고 봅니다. 또한 동시에가상머신 구현 기술이 최적화 가 징행되고 있으므로(sun client hotspot, 기타 가상머신 구현 업체들의 기술) 시간이 문제를 해결하리라 봅니다. class Life extends Object implements Dynamic { Life(Life father, Life mother){} responseToThis(Life this){} responseToOthers(Life others){} } |