https://wikidocs.net/257 미쳤다 블로그 글 너무 알차다. 

JVM은 사용자가 작성한 java코드를 byte code로 변환하고 class파일로 만들어 Runtime data area에 적재한다. 

 

메소드 영역 : class 정보, static 변수 , 메소드 정보, 생성자등을 분류해서 저장하고 스레드가 공유하는 영역.
힙 영역 : 객체와 배열이 생성, 가비지 콜랙션에 의해 힙영역에서 자동으로 쓰레기 객체를 제거. 

new 연산을 통한 인스턴스 변수, 참조 변수가 있다. 
 
스택 영역 : 각 스레드마다 하나씩 존재한다. 지역 변수, 매개 변수가 이에 해당한다. 
*메소드, 힙 => 스레드가 공유 
스택 => 각 스레드 하나씩. 

 

 

 

 

자바 - 가상 머신 - (윈도우, 리눅스, 맥)

제임스 고슬링이 가전제품의 효율적인 사용을 위해 프로그램 언어로 JAVA를 만들었음. 

 

JDK vs JRE vs JVM 차이는? 

JVM : OS 실행환경. 

JDK : 개발툴 설치( 개발을 하기 위한)

JRE : 개발 실행( 자바를 실행을 위한 ) //개발을 안할꺼면 필요없음.   java runtime environment

*IDE는 개발 툴( 이클립스, 인텔리 J 등 ) *API : 자바실행과 관련된 API (JVM실행시 함께 실행됨)

 

JVM의 역할 

  • 바이너리 코드를 읽는다.
  • 바이너리 코드를 검증한다.
  • 바이너리 코드를 실행한다.
  • 실행환경(Runtime Environment)의 규격을 제공한다. (필요한 라이브러리 및 기타파일)

 

돌아가는 구조

 

 

JRE

  • JRE는 JVM 이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기타 파일들을 가지고 있다.
  • JRE는 JVM의 실행환경을 구현했다고 할 수 있다.

JDK

  • JDK는 자바 개발도구(Java Development Kit)의 약자이다.
  • JDK는 JRE + 개발을 위해 필요한 도구(javac, java등)들을 포함한다.

jvm, api, jre, jdk란?   

컴파일과 인터프리터 

 

 

 

JAVA SE(stand edition) : 일반적인거.

JAVA ME(Mobile edition) : 모바일 개발. 잘안씀

JAVA EE : 기업 솔루션 개발.  

JAVA IDE: 통합 개발툴. 

JDK는 java 개발 키트. 

 

컴터에서 32비트와 64비트 차이. 

가비지 콜랙션 , 객체지향 언어 ( 유지보수 효율 )

 

JAVA 환경 변수 세팅 

bin 폴더 안의 javac.exe : java 파일을 jvm이 받아 들일 수 있는 .class 파일로 변환 시켜주는 프로그램. 

(매번 해당 경로에 들어가서 실행하기가 번거로우므로, 환경 변수 설정을 통해서 어디서나 실행 가능하게 함.) 

 시스템 설정. 

javac는 java compiler의 약어다. 

 

.java는 사람이 작성한 source 코드고 확장자가 .class인 파일로 변환한 다음 파일을 실행한다. 

왜? 자바 컴파일러를 통해서 기계가 쉽게 이해할 수 있는 byte code로 이뤄진 class파일로 변환. 

javac 파일명.java => 컴파일 과정에서 소스 코드 분석, 문법의 유효성을 검사한다. 

 

자바가 컴파일한 파일이 exe가 아니라 class파일인 이유는? 

컴파일을 하고 난뒤에 class파일이 생성되는데 왜 굳이 컴파일과 실행을 따로할까?? 

JVM은 byte code(.class파일)을 실행할 때에는 컴파일 과정에서 진행한 일들을 진행하지 않고 말그대로 실행만 한다. 

 때문에 컴파일+ 실행 이 아닌 실행만하기 때문에 빠르고 소스코드의 문법검사를 생략할 수 있다.

생성 형태

여러환경으로 받아온 class를 jvm에서 돌리기 위한 이유도 있다.

c, c++과 같은 언어는 컴파일 된 실행 파일을 모든 운영체제에서 동일하게 사용하는것이 불가능하다. 

그래서 자바는 JVM이라는 중간단계가 있으므로 C등의 언어보다 속도가 느리다. 하지만 한번 작성한 파일은 어떤 OS에서라도 사용할 수 있다는 장점이 있다. 

 

src 폴더는 .java 파일들이 저장되는 경로이며 bin 폴더는 .class 파일들이 저장되는 경로이다. .classpath와 .project는 현재 프로젝트의 환경값들을 저장하는 이클립스의 설정파일들이다.

Node Js는 컴파일을 안하나 그럼? 

 

 

JAVA CLASS PUBLIC 

+ Recent posts