ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA - 1 ( JAVA 기초 )
    study/java 2020. 7. 13. 17:25

    C/C++ 과의 차이점

    - 실행 환경

    - JAVA는 링크 과정이 없이 컴파일러가 바이트 코드를 생성하고, C/C++은 컴파일을 하고 난 후 링크 과정이 필요

    - C는 절차 지향 언어이고 JAVA는 객체 지향적인 언어

    - C는 임베디드나 운영체제처럼 속도나 용량 등에서 최적화가 필요한 곳에서 주로 사용하고, JAVA는 웹 사이트나 운영체제와 상관없이 실행되어야 하는 응용 SW, 안드로이드 앱 등에서 주로 사용

     

    장/단점

    장점

    - 운영체제에 독립적 ( JVM 에서 동작하기 때문 )

    - 객체 지향적인 언어 ( 캡슐화, 상속, 추상화, 다형성 등)

    - 가비지 컬렉터(GC)가 자동으로 메모리 관리

    - 오픈 소스 라이브러리가 풍부

    - 객체가 필요한 시점에 클래스를 동적 로딩하여 생성

     

    단점

    - JVM에 의해 기계어로 번역되고 실행하는 과정을 거치기 때문에 완전한 기계어에 비해 속도가 느림

    - 예외처리가 불편 ( 개발자가 직접 해주어야 함 ) 

     

     

    구동 원리

    1. 소스 코드를 작성 (.java 파일)

    2. 컴파일러가 소스 코드(.java)를 바이트 코드(.class)로 변환

    3. 런처(java.exe)로 JVM을 구동

    4. JVM이 바이트 코드를 해성하여 자바 프로그램 실행

     

    구조

    JVM의 메모리 구조

    - Class loader : 런타임시에 클래스 파일들을 JVM 내부로 로딩하고, 클래스 파일을 분석한 뒤 각각 런타임 데이터 영역에 배치한다.

    - Runtime Data Area : 클래스 로더에서 분석된 클래스 파일의 데이터를 저장하고 실행 도중에 필요한 데이터를 저장

    • 메소드 영역 : 바이트 코드의 정보들이 저장되는 공간 ( 바이트 코드, 전역 변수, static 변수 )
    • 힙 영역 : 동적 메모리 할당이 되는 영역으로 객체가 저장되는 공간, GC가 관리 ( new로 생성된 객체 )
    • 스택 영역 : 컴파일하며 이미 계산된 메모리를 할당하며 Primitive 데이터 타입이 저장, 블록 작업 완료시 메모리 반환 ( 매개 변수, 지역 변수 )
    • Native Method : 자바 외의 다른 언어를 저장하는 공간, JNI를 통해 다른 언어와 호환

    * JNI(Java Native Interface) : JAVA 외의 언어를 사용할 수 있게 해주는 인터페이스

    - Execution Engine : 런타임 데이터 영역에 배치된 바이트 코드를 해석하며 실행. 인터프리터 방식과 JIT 컴파일 방식을 혼합하여 해석

    * 인터프리터 방식 : 바이트 코드를 한 줄씩 읽으며 해석

    * JIT(Just-In-Time) : 바이트 코드를 런타임 시점에 바로 기계어로 변환

    - 가비지 컬렉터 : 때에 따라 메모리 관리 기능을 자동으로 수행. 더 이상 사용되지 않는 객체를 해제시켜 메모리를 반납

     

    ※ Heap vs Stack

    Heap

    Stack

    동적 메모리 할당(런타임때)

    컴파일할 때 이미 계산된 메모리 할당

    전역, 정적 변수 저장

    Object type 저장

    지역, 매개 변수, primitive type 변수 저장 heap에 저장된 참조 값 저장

    GC가 처리

    한 블록씩 작업이 종료되는데 각 작업이 종료되면 메모리 반환

     

     

    JVM(Java Virtual Machine)

     : 일반 프로그램은 운영체제가 프로그램을 실행시키는 반면 JAVA는 운영체제가 JVM을 실행시키면 JVM이 프로그램을 실행

    JVM

     

     

     

    사진 출처 :

    JVM의 메모리 구조

    http://www.incodom.kr/%EC%9E%90%EB%B0%94%EA%B0%80%EC%83%81%EB%A8%B8%EC%8B%A0%28Java_Virtual_Machine%2C_JVM%29/%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B5%AC%EC%A1%B0

    'study > java' 카테고리의 다른 글

    [JAVA] Try-with-resources  (0) 2020.07.30
    JAVA - 5  (0) 2020.07.20
    JAVA - 4 ( 객체지향 )  (0) 2020.07.16
    JAVA - 3  (0) 2020.07.16
    JAVA - 2 (변수타입과 컬렉션)  (0) 2020.07.15
Designed by Tistory.