자바의신 1~4강

kimseungki·2022년 8월 5일
0

독서

목록 보기
8/8
post-thumbnail

소개

자바의 신을 한 번 완독했다. 하지만, 햇갈리거나 약간 중요한 것 같은 핵심부분을 책에서 포함 된 내용은 물론 포함되지 않은 부분까지 넣어서 참고자료를 만들 생각이다. 참고로 모든 내용을 넣진 않고, 중요하다 싶은 내용만 간추렸다.

자바 메소드 구성

구성요소는 리턴타입, 메소드 이름, 매개변수 이렇게 구성이 되어있다.

객체지향 프로그래밍

  1. 클래스는 자바의 가장 작은 단위
  2. 클래스는 상태(변수), 행동(메소드)로 구성

예약어

예시 : public, class, int, return
예약어로 되어있는 것은 자바에서 지정한 이름이기 때문에 임의의 변수명이나
메소드명으로 쓸 수 없다.

JVM

자바의 실행과정 소개

소스.java ->
(컴파일구간)
java 컴파일러 실행(javac) -> 소스.class(바이트코드로 변환) -> 디스크
(런타임구간)
JVM -> 클래스로더를 통해 class파일들을 load하고 이후 해당 load 된 파일을 RuntimeArea에 적제한다. -> 해당데이터가 적제가 된 후 기계어로 변환되어 운영체제를 통해 실행

Method Area(클래스 영역)

static Area라고도 부르는 편
클래스정보(클래스 이름), 변수정보(변수 타입, 변수이름, 접근제어자)
메소드정보(메소드 이름, 리턴타입, 파라미터, 접근제어자)
static 변수, final class 변수 등
(의문) heap에 있는 constant pool(String객체의 데이터가 같을 경우 constant pool 공간에서 데이터를 가져옴)과 runtime constant pool은 같은건지 다른건지 의문점이 생겼다.

heap Area(힙 영역)

new 키워드로 생성된 객체와 배열이 저장되는 영역
Method Area에 로드된 것만 적제가능
모든 스레드가 공유가능한 영역
런타임시 할당
가비지컬렉터에서 사용
가비지컬렉터의 효율적 사용을 위해 area내에서 영역이 분리되어있다.

heap Area(GC 처리)

힙영역은 Young(에덴, 서바이벌), Old 영역으로 나뉜다.
<가비지컬렉터 진행과정>
1. 힙에 들어가면 Young영역에 들어오고 그 중 에덴에 들어감
2. 에덴에 들어간 이후 꽉차면 서바이벌 중 하나로 들어감
3. 서바이벌이 꽉차면 해당 서바이벌은 0으로 비우고 다른 서바이벌로 감
4. 서바이벌이 어느정도 차면 올드 영역으로 들어감
<결론>
여기서 Young영역에서 가비지 작업이 진행되는건 Minor GC
Old영역에 데이터를 옮기면 Major GC
Minor GC가 Major GC 보다 빠르다 이유는 Minar영역에 공간이 더 작기 때문에

stack Area

컴파일타임 이후 할당 됨
지역변수, 파라미터, 리턴값 등 값 데이터가 할당되는 영역
메소드 호출 시 쌓이고 메소드가 종료되면 삭제된다.

PC Register

스레드 생성 시(start 메소드 실행), 스레드의 주소값이 적제된다. 또한 현재실행중인 명령어가 들어가 있다.

Native Method Stack

자바로 메소드를 구현하지 않고 C, C++같은 문법을 통해 구현할 경우 해당 메소드의 내용이 해당 Stack에 적제됨, System.out에는 C언어도 있다고 하는데 자세하게 보진 못함

가비지컬렉션(GC)

메모리의 용량이 꽉찰경우 실행 중인 작업을 잠시 멈추고 참조가 되어있지 않은 데이터들을 제거를(Mark and Sweep) 통해 메모리를 관리하는 모듈이다. 힙 메모리를 정리함.

참고

하나의 스레드가 생성이 되면 그 스레드에는 stack Area, pc Register, native method stack를 가지고 있고, 나머지 요소(Method Area, heap Area)는 모든 스레드가 공유한다.

부족한점

heap 영역을 좀 더 세부적으로 나누어 가비지컬렉션이 작동되는 원리에 대해선 추후 vol2를 복습할 때 적거나 또는 여기에 좀 더 추가해 첨부할 생각이다.

클래스와 객체의 차이점

클래스는 자바의 가장 작은 단위이다. 또한 클래스를 통해 객체를 생성할 수 있다. 여기서의 차이는 하나의 클래스를 만들면 여러개의 객체를 만들 수 있다는 점에서 차이점이 존재한다.

변수의 종류

지역변수 : 중괄호 내에 선언된 변수(메소드 내에 존재)
매개변수 : 메소드에 넘기는 변수
인스턴스변수 : 클래스안에 선언 된 변수, static 예약어가 있을 경우 클래스 변수
클래스 변수 : static 예약어가 있고 메소드 밖, 클래스 안에 존재

기본 자료형

byte, short, int, long, char, float, double, boolean

참조 자료형

위의 8개를 제외한 전부(예시 : 클래스)

후기

전반적으로 1~4는 구현위주의 내용이 대부분이었다. 다만, 자바의 실행과정은 꼭 알 필요가 있고, 좀 더 상세하게 추후 공부할 생각이다.

profile
seung 기술블로그

0개의 댓글