자바는 썬마이크로 시스템즈에서 개발한 객체지향프로그래밍 언어이다.
객체지향이란 프로그램을 잘게 나누어 부품화 한 뒤 조립하는 형식으로 개발하는 방법을 말한다. 클래스와 객체 개념이 등장한다.
모든 운영체제에서 실행이 가능하다.
객체를 만들기 위해서 설계도인 클래스를 작성하고, 객체와 객체를 연결한다.
객체지향 언어의 특징인 캡슐화, 상속성, 다형성을 지원한다.
객체 생성시 자동으로 메모리 영역을 찾아 할당하고, 가비지 콜렉터(GC)를 실행시켜 자동으로 사용하지 않는 객체를 제거한다.
자바는 오픈소스 언어이며 라이브러리가 방대하다.
일반적으로 하나의 프로세스는 하나의 쓰레드를 가지고 작업을 수행한다.
멀티쓰레드는 하나의 프로세스 내에서 둘 이상의 쓰레드가 동시에 작업을 수행하는 것을 의미한다.
자바는 멀티쓰레드를 지원한다.
필요한 시점에 클래스를 로딩해서 사용할 수 있기 때문에 메모리 낭비를 방지할 수 있다.
자바 가상 머신 JVM은 자바 프로그램 실행환경을 만들어주는 소프트웨어이다. 자바코드를 컴파일하여 .class 바이트 코드로 만들면 이 코드가 자바 가상머신 환경에서 실행된다.
JVM을 사용하면 하나의 바이트 코드(.class)로 모든 플랫폼에서 동작하도록 할 수 있다.

컴파일을 통해 .class파일이 생성되고 이 바이트코드는 클래스 로더를 통해 JVM Runtime Data Area로 로딩되며 로딩된 .class바이트 코드를 JVM이 해석하여 프로그램이 실행된다.
닷넷 프레임워크(.NET Framework)는 MS에서 제공하는 윈도으 프로그램 개발 및 실행환경이다. 네트워크 작업, 인터페이스 등 많은 작업을 캡슐화하여 코딩의 효율성을 증대시켰다.
자바가 차세대 언어로 각광받으면서 MS사에서 자바의 장점을 수용하여 C#을 만들었고 C#은 .NET Framework를 사용한다.
CLS(Common Language Specification)을 따르는 언어라면 어떠한 언어라도 닷넷에서 실행이 가능하며 CLR(Common Language Runtime)이라는 가상 기계위에서 작동하기 때문에 플랫폼에 독립적이며 개발하기 쉽다.

자바의 경우
자바소스 -> 컴파일 -> 바이트코드로 변환
바이트 코드는 JVM상에서 변역되어 실행된다.
JVM상에서 바이트코드가 네이티브 코드로 바뀌어 실행하게 된다.
JVM은 런타임으로 자바만 동작할 수 잇다.
.NET의 경우
.NET코드 -> 컴파일 -> IL로 변환
IL은 CLR에 의해 실행시 네이티브 코드로 바뀌어 실행하게 된다.
CLR은 공용언어 런타임으로 C#이나 비주얼베이직닷넷과 같은 CLS를 따르는 언어는 모두 동작할수 있다.
https://coding-factory.tistory.com/827 -> JVM
https://wisdom-and-record.tistory.com/48 -> 멀티쓰레드
https://coding-factory.tistory.com/132 -> .NET