이 글은 자바 최적화 (Optimizing Java,가장 빠른 성능을 구현하는 검증된 10가지 기법) 책을 학습한 내용을 토대로 작성되었습니다.
Given a string s which represents an expression, evaluate this expression and return its value.
The integer division should truncate toward zero.
이 글은 자바 최적화 (Optimizing Java,가장 빠른 성능을 구현하는 검증된 10가지 기법) 책을 학습한 내용을 토대로 작성되었습니다.
성능 테스트의 다양한 패턴들에 대해 알아본다.
그리고 테스트는 가능하다면 모든 면에서 운영 환경과 똑같이 설정해야 한다.
종단 트랜잭션에 걸리는 시간은?
고객이 트랜잭션 또는 페이지 로딩을 얼마나 오래 기다려야 하는지를 측정하는 테스트이다.
지연 측정 시 반드시
처리율을 어느 정도 수준으로 유지했는지 함께 기술해야 한다.
Construct a deep copy of the list. The deep copy should consist of exactly n brand new nodes, where each new node has its value set to the value of its corresponding original node. Both the next and random pointer of the new nodes should point to new nodes in the copied list such that the pointers in the original list and copied list represent the same list state. None of the pointers in the new list should point to nodes in the original list.
이 글은 자바 최적화 (Optimizing Java,가장 빠른 성능을 구현하는 검증된 10가지 기법) 책을 학습한 내용을 토대로 작성되었습니다.
성능 진단의 첫 단추는 어느 리소스가 한계에 다다랐는지 밝히는 일이다.
부족한 리소스를 제대로 알지 못하면서 성능을 제대로 튜닝할 수는 없다.
이 글은 자바 최적화 (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에 존재한다.