본문 바로가기

개발 관련 부가 지식/자바, 스프링

자바란, JVM 구조에 대해서 정리

728x90
728x90

자바가 나온 이유

-> 이전에는 Mac, Window 등 다른 운영체제마다 개발자가 코드를 다르게 짜줘야 했지만,

자바는 운영체제 위에 띄우는 JVM이라는 가상머신이 개발자의 코드를 운영체제에 맞게 변환시켜주기 때문에

운영체제를 가리지 않고 동일한 소스코드를 사용할 수 있게 되었다.

 

객체지향 프로그래밍

-> 자바는 객체지향 프로그래밍 언어임

-> 객체지향 프로그래밍 특징은 아래와 같음

 

추상화 :

어떤 실체로부터 공통적인 부분이나 관심 있는 특성들을 뽑아 한 곳에 모으는 것을 의미

 

캡슐화 :

외부와의 낮은 결합도, 내부에서의 낮은 응집도를 추구하기에 캡슐 내부의 로직이나 변수들을 감추고 외부에는 기능(api)만을 제공하는 것을 의미

 

상속

클래스를 재사용하는 것이다,

클래스를 상속하면 멤버변수나 메소드를 그대로 물려 받을 수 있다. 코드 재활용성 상승 및 , 유지 보수성을 좋게한다

 

다형성 :

같은 모양의 함수가 상황에 따라 다르게 동작 하는 것으로 오버로딩과 오버라이딩이 있는데,

오버로딩이란것은 같은 메소드명에 파라미터 갯수, 타입, 리턴 타입 등을 다르게 사용하는 것을 의미하고,

오버라이딩은 상위 클래스의 메소드를 하위 클래스에서 똑같은 이름으로 재정의 하는것을 의미

 

추상클래스 VS 인터페이스

-> 추상클래스는 코드 재사용과 기능 확장에 목적이 있다

-> 인터페이스는 같은 메소드(기능, 동작)을 보장하는 것에 그 목적이 있다.

 

자바의 실행 프로세스

-> 컴파일러가 자바 파일 -> 클래스 파일(바이트 코드) 로  변환

-> Class Loader 가 바이트 코드를 런타임 데이터 영역에 로드

-> 실행 엔진이 로딩된 바이트 코드를 실행

 

자바 메모리구조(RUN TIME DATA 영역)

(공통영역)

-> Method Area : 각 클래스 전역변수, 정적변수, 메소드 정보 등 저장

-> Heap Area : 클라이언트가 사용하면서 생기는 객체들, Data들이 저장

 

(스레드 별로 할당)

-> Stack Area : 호출된 함수(메소드)에 대한 정보 (파라미터, 지역변수, 리턴 변수)

-> PC Register : 현재 수행 중인 명령어를 저장

-> Native Method Stack : 자바 외부 언어 코드를 저장

 

가비지 컬렉션(G.C)

-> JVM에서 메모리 관리해주는 모듈

-> Heap 메모리를 재활용 하기 위해, 메모리에 참조되어 있지 않은 데이터를 찾아 없앰 (Mark and Sweep이라 부름)

-> Mark and Sweep이 일어날 때는 스레드가 멈춘다는 단점이 있음