JVM 도입은 왜 됬을 까?
자바가 나오던 시절에는 네트워크가 발달하던 시절이라 네트워크로 모든 것이 연결 다기종의 디바이스에서 실행하기위한 프로그램이 필요하다! C,C++ 는 플랫폼 마다 컴파일을 해줘야 되는대.. (핸드폰도 나오고,, 테블릿도나오고 여러가지 기종에 맞게 컴파일 못함) 그래서 자바가 나옴.
디바이스마다 운영체제 하드웨어가 다다르기 때문에 자연스럽게 플랫폼 의존하지 않도록 언어 설계 그 결과가 Java Bytecode , JVM
- 정리해보면 다기종 디바이스에서 실행하기위해
- 공통적으로 컴파일을 하기위해 JVM도입?
- 예제그림.. JVM 없던시절 OS가 달라지면...
- 이렇게 된이유가 이제 네트워크 시대가 열리기 시작하면서 부터 위에 참고..
- 여러가지 기종에 맞게 다양하게 컴파일하기위해 JVM 등장
- 클래스파일만 network 통해서 브라우저에 전달해주면
- 해당브라우저에 JVM만 설치해주면? 실행하기만 하면 되겠네
- 지금 자바스크립트가 이렇게 동작하고있따 (java는 아직안됀다? 브라우저라?)
- 컴파일러에도 프론트엔드 백엔드가 있따
- 컴파일러에서 프론트엔드는 안바뀜 왜?
- 여러분이 짠 소스코드를 분석해서 의미를 파악.
- 이런 레이어드 아키텍처로 되있음..
- 프론트엔드는 javac가 컴파일
- 백엔드는 JVM이 작업해줌
runtime data areas
- JVM이 자바바이트 코드를 실행하는 가상의 기계
- 여러가지 메모리의 종류 메모리 공간이 필요한대 그때 쓰는게 Runtime Data Areas
- 변수 ? 메서드? 정적변수? 어떤게 있는가 바이트 코드는 어떤가 저장하는 곳
- 프로그램을 실제로 실행하면서 생성하는 객체인스턴스를 저장한다.
- pc 프로그램 카운터
- 각 스레드는 메서드를 항상 실행한다.
- pc는 그 메서드안에서 바이트코드 몇번째를 실행하는지? 나타내는 역할
- 아래로 성장 맨 위에 스택프레임은 메인메서드.
- 아래는 메인메서드에서 호출하는메서드 -> 반복..
- 메서드 실행이 끝나면 스택프레임은 pop 되어 제거가 된다.
- 이런 정보를?
- 바이트코드를 실행하기위해 반드시 필요한 정보들
- 내 메서드가 어떤 클래스에 속하는지 ?
- c나 c++ 코드를 컴파일에서 사용하는 경우가 있따 JVM
- 그때 사용되는 메서드..