썬마이크로시스템즈
에서 개발제임스 고슬링
과 아서 밴 호프
가 가전제품에 탑재될 소프트웨어를 만드려함C++
를 확장해서 시작했지만 인터넷이 등장하자 C++
는 안될거라는것을 꺠달음1991년
에 오크
라는 언어부터 시작1996년 1월
에 자바
를 발표Applet
이 인기를 누림Applet
을 안쓰자 Servelt
, JSP
를 사용JVM을 이용해서 여러 운영체제에 사용가능
운영체제별로 JVM 버전이 다르다.
상속
캡슐화
다형성
C++
에서스몰톡
이라는 객체지향언어를 가져옴
자바는 자동으로 메모리 관리를 하기 때문에 개발자는 코딩만 하면된다.
때로는 이게 비효율적일 수 있음
네트워크 프로그래밍 라이브러리가 있어서 생산성이 좋음
운영체제별 멀티쓰레드 동작이 다르고 처리방식이 다르다.
자바는 OS와 상관없이 구현할 수 있다.
여러 쓰레드에 대한 스케줄링을 자바 인터프리터가 담당한다. (이부분은 따로 다시 봐야할듯)
자바를 실행하면 현재 사용하는 클래스만 실행된다.
컴파일을 할때 변경된 클래스만 컴파일하면 된다. (이부분은 따로 다시 봐야할듯)
이미지 참고 : https://medium.com/@lazysoul/jvm-%EC%9D%B4%EB%9E%80-c142b01571f2
.java파일 -> 컴파일러 -> 바이트코드(.class파일) -> JVM영역시작 -> 클래스로더 -> JIT컴파일러 -> 기계어
.class
파일에서 인스턴스
가 생성 -> 메모리생성.class
파일에서 메서드
실행 -> 기계어변환결국 클래스로더에서 계속 반복된다.
javac Hello.java
java Hello
내부동작
.class
파일 로드- 클래스파일검색
main(String[] args)
호출- 종료되면 모든 자원 반환 (멀티쓰레드는 모든 쓰레드가 종료되야함)