跳至主要内容

Java Compiler와 JVM




java소스는 Java Compiler(javac)에 의해 바이트 코드로 변환됨
바이트 코드(.class파일)는 JVM에 의해 구동되고 기계어로 변환 된후 실행됨
  • 기계어에서 → 실행까지의 과정을 프로그램에서 Link되었다고 함.
  • Link되었다는 것은 프로그램이 구동되기 위해 필요한 메모리를 로딩하고, 실행될수 있도록 실행 준비를 하고, 실행 결정 및 실행 초기화하는 것.
TPCSCHOOL.com에서 따온 그림


Java compiler

  • JVM이 이해할 수 있는 자바 바이트 코드로 변환
  • 자바 컴파일러는 javac.exe라는 실행 파일로 설치 됨

Java bytecode

  • JVM이 이해할 수 있는 언어로 변환된 자바 소스 코드
  • 확장자는 .class
  • JVM이 설치되어 있으면 운영체제에 별개로 실행 가능

Java Virtual Machine

  • java bytecode를 실행시키는 가상의 machine
  • JVM은 운영체제에 종속적이고, 각 운영체제에 알맞는 JVM을 설치해야 함

JVM의 구성

  • class loader
  • interpreter
  • JIT(Just-In_Time) Compiler
  • Compiler
  • GC(garbage collector)
자바는 동적으로 클래스를 읽어오고, 프로그램이 실행 중인 런타임에 모든 코드가 자바 가상머신과 연결된다.
class loader: 동적으로 클래스를 로딩해준다.
interpreter: 자바 컴파일러에 변환된 자바 바이트 코드를 읽고 해석, dynamic translation이라고도 불리며 프로그램의 실행 속도를 향상시키기 위해 개발됨
JIT Compiler: 바이트코드(컴파일된 자바코드)를 하드웨어의 기계어로 변환

Reference → 인프런의 Java 프로그램의 실행 구조
              → [http://tcpschool.com/java/java_intro_programming]

评论

此博客中的热门博文

Pandas Plot

pandas.DataFrame.plot.bar import matplotlib.pyplot as plt import pandas as pd import numpy as np df = pd.DataFrame(np.random.rand(5, 4).round(1),                   index=['snail', 'pig', 'elephant','rabbit', 'giraffe'],                   columns=pd.Index(['speed', 'lifespan', 'active', 'cuite'],                   name='Genus')) ax = df.plot(kind='bar',figsize=(10,4), rot = 0) plt.show() ==> output in Pycharm

Spring Cache

Cache 추상화 이해하기 핵심부분에서 추상화는 Java method에 캐싱을 적용함으로써 캐시에 보관된 정보로 메서드의 실행 횟수를 줄여준다. 즉 대상 메서드가 실행될때마다 추상화가 해당 메서드가 같은 인자로 이미 실행되었는 확인하는 캐싱 동작을 적용한다. 해당 데이터가 존재한다면 메서드를 실행하지 않고 결과를 반환하고 존재하지 않는다면 메서드를 실행하고 그 결과를 캐싱한 뒤에 사용자에게 반환해서 다음번 호출시에 사용 할 수 있게 한다. Spring cache는 cache 추상화를 지원하는데 EhCache, Redis, Couchbase 등 캐시 저장소와 빠르게 연동하여 bean으로 설정 할 수 있도록 도와준다. 선언적인 어노테이션 기반의 캐싱 @Cacheable  메소드에 지정 가능하고 지정된 메서드의 캐시 설정에 따라 데이터가 한번 생성되면 데이터가 캐싱되며, 다음 호출 시에 캐시에 저장된 데이터가 리턴된다. @Cacheable 설정 옵션은 다음과 같다. value 캐싱 공간의 대표 명칭 key Spring Expression Language(SpEl)으로 key생성을 지정  지정하지 않으면 모든 파라미터를 조합한 해시코드 값을 키로 생성 condition 조건부 캐싱. SpEL로 지정하고 표현식이 true면 메서드를 캐시 사용가능한 SpEL evaluation context 이름 위치 설명 예시 methodName root object 호출되는 메서드의 이름 #root.methodName method root object 호출되는 메서드 #root.method.name target root object 호출되는 대상 객체 #root.target targetClass root object 호출되는 대상 클래스 #root.targetClass args root object 대상을 호출하는데 사용한 인자(배열) #root.args[0] caches root object 현재 실행된 메서드 캐시의 컬렉션 #root.caches[0].name a...

R 데이터 타입

R에서의 데이터 타입 기본형은 Vector 이다. 자료형은 다음과 같다. Vector List Matrix Array DataFrame Vector 정의 다른 언어의 배열과 비슷하고, 한 가지의 스칼라 데이터타입의 데이터들을 저장할 수 있다.       (ex, 숫자만 저장하는 배열/문자열만 저장하는 배열/ a <- 1/ a <- "hello") 슬라이스(Slice)를 제공한다.        Slice란? 배열의 일부를 잘라내고 이를 다시 배열로 다루는 개념 생성 c()함수 안에 원하는 인자들을 나열 > x <- c(1, 2, 3) > x [1] 1 2 3  다음과  x <- c(1, 2, 3)부분에 괄호로 코드를 묶으면 실행된 결과값이 출력된다.        ※ 괄호로 코드를 묶으면 괄호안의 문장을 수행하고 그 결과 값을 화면에 출력 > ( x <- c(1, 2, 3) ) [1] 1 2 3 데이터 접근 인덱스로 데이터에 접근할 수 있고 인덱스는 0이 아닌 1부터 시작한다. 접근 문법 x[n]: vector x의 n번째 요소 x[-n]: vector x에서 n번째 요소를 제외한 나머지를 반환 > x <- c("a", "b", "c") > x[-1] [1] "b" "c" x[idx_vector]: idx_vector에 지정된 요소를 얻어옴. idx_vector는 색인을 표현하는 숫자 vector이다. > x <- c("a", "b", "c") > x[c(1, 2)] [1] "a" "b" x[start:end]: start부터 end까지의 값을 반환, 반환 값은 start위치의 값과...