자바 소개
○ 컴퓨터
- 컴퓨터의 하드웨어 : CPU (연산장치), 메모리 (기억장치), 드라이브 (저장), 입출력장치
- CPU (Central Process Unit, 중앙처리장치) : 명령어를 해독하고 실행하는 장치로, 제어장치, 연산장치, 레지스터들로 구성된다.
- 제어장치 : 중앙처리장치에서 일어나는 모든 작업을 통제하고 관리하는 일을 한다. 프로그램 명령어를 해석하고, 해석된 명령의 의미에 따라 다른 장치들에게 동작을 지시한다.
- 연산장치 : 연산장치 (ALU : Arithmetic Logic Unit)는 연산을 하는 장치로, 제어장치의 제어신호에 따라 덧셈, 뺄셈, 곱셈, 나눗셈의 산술연산과 AND, OR, NOT 등의 논리연산을 수행한다.
- 레지스터들 : 중앙처리장치에 명령어나 데이터 그리고 연산한 결과 등을 저장하는 기억장소이다. 레지스터는 중앙처리장치에서 명령어를 실행하는 동안 필요한 정보들을 저장하는 기억장치로, 레지스터의 크기와 캐수는 중앙처리장치에 따라 차이가 난다.
- 기억장치 : 캐시기억장치, 주기억장치, 보조기억장치
- 메인보드 : 컴퓨터의 기본적인 부품을 장착한 기판, CPU, 마이크로프로세서, 보조프로세서, 메모리, 바이오스, 확장슬롯, 접속회로 등
○ 자바
- 컴파일러 : 소스코드를 컴퓨터 (CPU)가 알아들을 수 있게 번역해주는 번역 프로그램.
- 인터프리터 언어 : 소스코드를 한 줄씩 인터프리터로 읽어서 실행한다.
이전 프로그램의 종속성
- 호환성이 없다와 동일한 의미이다. C/C++은 CPU와 OS에 따라 컴파일을 따로 해줘야한다. 즉, OS에 따라 프로그램을 따로 코딩하여야 한다. 쓰는 라이브러리도 달라진다.
- 프로그램의 플랫폼 호환성이 없는 이유
- 기계어가 CPU마다 다르다.
- 운영체제마다 API가 다르다.
- 운영체제마다 실행파일 형식이 다르다.
자바는 플랫폼 독립성
- Write Once, Run Anywhere
- 기계어, 운영체제와 관계없이 실행 가능하다.
- OS단 위에 JVM을 설치한다 : OS마다 JVM이 달라진다.
- 하나를 더 거치니까 끊기거나 느려질 수 있다 : 게임은 C/C++을 주로 사용한다.
자바 버전 요약
- 1.5 : 제네릭, 오토박싱, 열거형, 애노테이션, "for each" 반복 루프
- 1.8 : 람다, 스트림
- 15 : Sealed 클래스, 은닉 클래스, 텍스트 블록, 레코드 도입
- 현업에서는 1.5은 잘 알지만, 1.8은 잘 안 쓰는 곳도 많다. 꼭 자바버전 확인하자.
- 신규에서는 스프링과 11버전을 주로 쓴다.
JVM
java SE 7 기준 JDK 구조
프로그램이 돌아가는 원리
- 프로그램을 설치하게 되면 하드디스크 (SSD)에 저장된다.
- exe (execute) 파일을 클릭해서 실행한다.
- 프로그램끼지 겹치지 않게 메모리에 올리는 기능은 OS가 하게 된다. (메모리관리가 OS 기능 중 하나다)
- java에서는 jvm이 OS에 요청하여 메모리를 할당한다. JVM은 할당받은 메모리를 용도에 따라 여러 영역으로 잘 나누어 관리한다.
- Java Compiler (javac.exe) : java source 파일 (개발자가 작성한 java 언어로 된 파일)을 JVM이 해석할 수 있는 java byte code (.class 파일)로 번역한다.
- 일반 윈도우 프로그램의 경우, compile하게 되면 컴퓨터가 해석할 수 있는 assembly 언어로 구성된 파일이 생성된다.
- Class loader : class 파일을 JVM내로 로딩한다. runtime 시에 동적으로 클래스를 로드한다.
- Execution Engine : 로딩 된 class 파일을 명령어 단위로 읽어서 해석한다. 이때 byte code가 binary code로 변경된다.
- 일반적인 윈도우 프로그램의 경우 assembler가 assembly 언어를 binary code로 변경한다.
- Runtime Data Areas : 이곳이 JVM이 OS로부터 할당받은 메모리 영역이다. 해석된 코드는 이 area 내의 각 부분에 배치되어 실질적인 수행이 이루어진다.
참고 : https://ifcontinue.tistory.com/9
메모리 그리기
- 번지수를 적는다.
- 화살표를 표시하지 않는다.
- 차곡차곡 쌓지 않는다.
참고 :
https://highright96.tistory.com/70
https://ifcontinue.tistory.com/9
https://docs.oracle.com/javase/7/docs/index.html