이 글은 자바 최적화 (Optimizing Java,가장 빠른 성능을 구현하는 검증된 10가지 기법) 책을 학습한 내용을 토대로 작성되었습니다.
JVM은 스택 기반의 해석 머신이다.
일부 결과를 실행 스택에 보관하며
이 스택의 맨 위에 쌓인 값을 가져와 계산한다.
JVM Interpreter의 기본 로직은
평가 스택을 이용해 중간값들을 담아두고
가장 마지막에 실행된 명령어와
독립적으로 프로그램을 구성하는 Opcode를 하나씩 순서대로 처리하는
while문 안의 switch 문이다.
// Opcode(Operation Code) : 기계어 일부로서 수행할 명령어를 나타내는 부호
java HelloWorld 명령을 입력하면
Java Application이 실행되고
OS는 JVM을 구동시킨다.
JVM이 구성되고
스택 머신이 초기화된 다음
실제로 유저가 작성한 HelloWorld 클래스 파일이 실행된다.
그리고 HelloWorld.class에 있는 main( ) 메서드가
Application의 진입점이므로
제어권을 이 클래스로 넘기려면
JVM이 실행되기 전에
해당 클래스를 Load 해야 한다.
이 시점에 Java의 Class Loading 매커니즘이 관여한다.
자바 프로세스가 새로 초기화되면
사슬처럼 줄지어 연결된 클래스로더가 차례차례 작동한다.
제일 먼저
Bootstrap 클래스가
자바 런타임 코어 클래스를 로드한다.
Bootstrap 클래스로더의 주 임무는
다른 클래스로더가 필요로 하는 최소한의 필수 클래스만 로드하는 것이다.
ex) java.lang.Object, Class, Classloader
그다음 Extension 클래스로더가 생긴다.
Bootstrap 클래스로더를 자기 부모로 설정하고
필요 시 클래스로딩 작업을 부모에게 넘긴다.
// Extension.class extends Bootstrap.class
끝으로 Application 클래스로더가 생성되고
지정된 클래스패스에 위치한 유저 클래스를 로드한다.
일반적으로 99%는 Application에 존재한다.
이 글은 자바 최적화 (Optimizing Java,가장 빠른 성능을 구현하는 검증된 10가지 기법) 책을 학습한 내용을 토대로 작성되었습니다.
일정 시간 동안 완료한 작업 단위 수 // ex) TPS
시스템이 수행 가능한 작업 비율을 나타내는 지표이다.
보통 일정 시간동안 완료한 작업 단위 수로 표시를 한다.
ex) 초당 처리 가능한 트랜잭션 수(=TPS)
처리율 테스트 시
실행 간 워크로드(workload) 역시 일정하게 유지해야 한다.
// 워크로드 : 시스템이 주어진 시간 내에 처리해야 할 작업 할당량
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다.
이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.
어피치에게 시달리는 제이지를 도와, DB 캐시를 적용할 때 캐시 크기에 따른 실행시간 측정 프로그램을 작성하시오.
캐시 교체 알고리즘은 LRU(Least Recently Used)를 사용한다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.