saurus2
Saurus2
saurus2
전체 방문자
오늘
어제
  • 분류 전체보기
    • 개발
      • AJAX
    • ML Ops
    • Profile
    • 음식점
    • 배낭여행
    • 컴퓨터공학
      • 알고리즘 공부
      • C++
      • Sever 스터디
      • Java spring
      • 알고리즘 _ 문제해결
      • 딥러닝
      • Java 정리
      • Python
      • LeetCode 1000
      • Machine Learning Study
      • Sign language Detection Pro..
      • LeetCode Solutions
    • 비콘
    • 데일리 리포트
    • 유학일기
      • 영어 공부
      • Daily
    • AI Master Degree
      • Data Mining
      • AI and Data engineering
      • Math Foundations for Decisi..
      • Natural Language Processing

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 릿코드
  • 취준
  • 백준
  • 문제해결능력
  • LeetCode
  • 파이썬
  • 알고리즘
  • 온라인저지
  • 리트코드
  • DFS
  • BFS
  • 개발자 취업준비
  • two pointer
  • c++
  • 개발자
  • 취업준비
  • 딥러닝
  • Python
  • 알고리즘문제해결
  • 딕셔너리

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
saurus2

Saurus2

java study day1
컴퓨터공학/Java 정리

java study day1

2016. 12. 21. 17:28

1. 자바로 Hello, World 출력하기

Printing to stdout

public class Solution {

    public static void main(String[] args) {

        /* Enter your code here. Print output to STDOUT. Your class should be named Solution. */

        System.out.println("Hello, World.");

        System.out.println("Hello, Java.");

    }

}

자바 응용프로그램은 자바가상머신(JVM, Java Virtual Machine)에서 실행된다.

JVM은 자바 응용프로그램으로 부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달한다.

(운영체제나 하드웨어와 관련된 일은 JVM이 하는것이다.)


자바 컴파일러는 Java안에 있는 Java .class file을 컴파일 한다. 그리고 .class 파일을 JVM에 넣어 수행한다.


JVM의 메모리 구조


1. 클래스 로더 서브시스템

자바의 동적 클래스 로딩은 클래스 로더 서브시스템으로 구현된다. 처음 runtime 시간에 클래스 파일을 로드, 링크, 초기화 한다. 

컴파일시간이 아닌 런타임 시간에 수행된다. 

 1.1 로딩

1. 부트스트랩 클래스 로더 : rt.jar을 로딩함

2. 확장 클래스 로더 : jre\lib ext 폴더를 로딩함

3. 어플리케이션 클래스로더 : 어플리케이션 계층의 클래스경로를 로딩함


1.2 링킹

verify - verification이 실패하면 verification error를 받게 되는데 그것을 체크함

prepare - default values를 할당함

resolve - Method Area에서 original references를 가져와 모든  All symbolic memory references 를 대체함


1.3 초기화

모든 static variables을 original values로 당하고 static block이 시작시킴


2. Runtime Data Area (JVM 메모리 구조라고 알고 있는 부분)

1. Method Area - Static Variables을 포함하여 모든 클래스 계층의 데이터를 저장하고 있는 장소

2. Heap Area - 각 JVM마다 존재하는 힙 (저장공간)은 멀티 쓰레드를 위해 메모리를 공유하는 장소

모든 오브젝트와 new 연산자에 의해 생성되는 변수들과 배열들이 모두 여기에 생성되고 보관됨

3. Stack Area - Runtime stack에 생성되며 모든 쓰레드를 위한 저장소

모든 메서드 콜을 위해 스택 구조로 만들어져 있으며, Stack Frame 이라고 부름 

모든 local 변수들은 스택 메모리에 저장됨

메서드가 호출되면 메서드 수행에 필요한 메모리공간을 할당받고 메서드가 종료되면 사용하던 메모리를 반환함

4. PC Registers

모든 쓰레드는 PC Registers에 분리되어 있으며 현재 수행 instruction의 주소가 저장되어 있고, 수행할 때 다음 

instruction이 PC registers에 저장될 것임.

5. Native Method stacks 

모든 쓰레드를 위해 분리된 스택공간이 생성됨


3. Execution Engine

bytecode는 런타임 데이터 장소에 할당되고 execution engine에 의해 수행된다. 


3.1 Interpreter 

bytecode를 빠르게 해석할 수 잇지만 수행하는 것은 느림

하나의 메서드가 다중시간에 호출 됬을때 매 시간마다 새로운 인터프리테이션이 요구됨

3.2 JIT Compiler

JIT 컴파일러는 인터프리터의 단점을 중화시킴

Execution Engine은 인터프리터를 돕는데 수행되지만 반복된 코드를 찾을때는 JIT 컴파일러를 사용함

JIT 컴파일러는 모든 bytecode를 컴파일하고 native code로 변환함

네이티브 코드는 반복된 메서드 호출을 위해 직접적으로 사용되어 성능을 향상시킴

3.3 Garbage Collector 

사용이되지 않은, unreferenced 된 오브젝트를 모으고 제거한다. System.gc() 를 호출하여 사용할 수 있음


4. Java Native Interface (JNI)

Native Method Libraries와 사이에서 작용하여 Native Libraries를 Execution Engine에 제공하기 위해서 사용됨


5. Native Method Libraries 

Execution Engine에서 필요로하는 Native Libraries들의 집합

2. 수행 구조 예제

public class Solution {

    public static void main(String[] args) {

        /* Enter your code here. Print output to STDOUT. Your class should be named Solution. */

        System.out.println("Hello, World.");

        System.out.println("Hello, Java.");

    }

}

hackerrank.com 에서 헬로우 월드를 출력한 클래스를 기준으로 본다면 

처음 로더에서 경로를 받아오고 링크하여 컴파일을 한 후, 자바 파일을 수행한다.

그 후에 호출 스택 장소에 public static void main() 클래스가 스택에 들어간 후 

System.out.println() 함수가 들어감 -> 수행되고 나면 해당 함수는 반환되고 스택을 빠져나감

main이 마지막에 반환되면 프로그램이 종료 !


출처 : https://dzone.com/articles/jvm-architecture-explained



저작자표시 (새창열림)

'컴퓨터공학 > Java 정리' 카테고리의 다른 글

java study day1-2  (0) 2016.12.21
java study day1-1  (0) 2016.12.21
    '컴퓨터공학/Java 정리' 카테고리의 다른 글
    • java study day1-2
    • java study day1-1
    saurus2
    saurus2
    Simple is Best

    티스토리툴바