목표 - 자바소스 파일 JVM 실행 과정 이해 학습할것 - JVM이란 무엇인가 - 컴파일 하는 방법 - 실행하는 방법 - 바이트코드란 무엇인가 - JIT 컴파일러란 무엇이며 어떻게 동작하는지 - JVM 구성요소 - JDK와 JRE 차이 1. JVM 이란 무엇인가? JVM (Java Virtual Machine) 이란 각 종 OS에 '독립적' 으로 java 프로그램을 작성하여 실행할 수 있게 해주는 구현체이다. EX) C 언어는 기계어로 컴파일이 되프로 H/W 에 맞게 각각 컴파일이 되어진다. - CPU 제조사에 따라 해석할 수 있는 기계어가 다르기 때문이다(C 프로그램은 플랫폼에 종속적). 그에 반에 java 프로그램은 cpu가 해석 할 수 있는 기계어가 아닌 JVM이 해석 가능한 가성 머신용 바이트 코..
안녕하세요? 오늘부터 java에 대해서 공부해 보겠습니다. java란? java는 객체지향(OOP) 프로그래밍 언어입니다. 현재 웹 개발이나 앱 개발 등 다양한 실무에서 쓰이고 있습니다. java의 특징 ● 객체지향(OOP, Object OrientedProgramming) 언어이다. - 쉽게 생각하면 자동차를 만드는 과정에서 처럼 부품 하나하나(하나하나가 객체)를 만들어 조립해서 자동차를 완성한다고 생각하면 될 것 같습니다. ● 이식성이 높다. - 서로 다른 실행환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것을 말한다. ● 메모리를 자동 관리한다. 등등 이 있습니다. java가 실행되는 과정 JVM은 운영체제에 따라서 알맞은 신호로 변경해서 프로그램의 구동을 도와줍니다. 하지만 각 운영체제..
스레드를 생성하고 시작하려면 스레드는 다양한 상태를 가지게 됩니다. 스레드의 상태는 자동으로 변경되거나 코드로 변경해서 제어할 수 있는데요. 이번 시간에는 스레드 제어에 대해서 알아보겠습니다. 스레드 상태 우선 스레드의 실행 흐름을 그림으로 알아보겠습니다. 스레드 객체를 생성하고 start() 메서드를 호출하면 바로 실행되는 것이 아니라 실행 대기 상태가 됩니다. 실행 대기상태란 언제든지 실행할 준비가 되어있는 상태를 말합니다. 운영체제는 실행 대기 상태에 있는 하나의 스레드를 선택하고 CPU가 run () 메서드를 실행상태로 만듭니다. 실행 상태의 스레드는 run() 메서드를 모두 실행하기 전에 다시 실행 대기 상태로 돌아갈 수 있고, 실행 대기 상태에 있는 다른 스레드 중에서 하나를 선택해 실행 상태..
동기화 메서드 지난 시간에는 스레드 A를 사용하는 중 스레드 B를 사용하면 스레드 B가 스레드 A의 상태를 변경시켜버려 의도하지 않았던 결과를 얻었는데요, 이를 방지하기 위한 방법을 알아보겠습니다! 스레드가 사용 중인 객체를 다른 스레드가 변경할 수 없게 하려면 스레드 작업이 끝날 때까지 객체에 잠금을 걸어서 다른 스레드가 사용할 수 없도록 해야 합니다. 멀티 스레드에서 단 하나의 영역을 실행할 수 있는 영역을 임계 영역이라 하는데 자바는 임계 영역을 지정하기 위해 동기화 메서드를 제공합니다. 내부의 동기화 메서드를 실행하면 즉시 객체에서 잠금을 걸어 다른 스레드가 동기화 매소드를 실행하지 못하게 해요! 그 방법을 설명드리겠습니다. 동기화 메서드를 만들려면 메서드 선언부에 synchronized 키워드를..
싱글 스레드 프로그램에서는 1 개의 스레드가 객체를 독차지해서 사용하면 되지만, 멀티스레드 프로그램에서는 스레드들이 객체를 공유해서 작업해야 하는 경우가 있습니다. 이때 여러 스레드에서 동시에 한 객체에 접근할 수 있게 되면, 한 스레드에 의해 변경된 객체의 상태가 다른 스레드의 작업에 영향을 미쳐서 의도치 않은 결과를 낼 수 있습니다. 공유 객체를 사용할 때의 주의할 점 멀티 스레드 프로그램에서 스레드들이 객체를 공유해서 작업해야 하는 경우, 스레드 A가 사용하던 객체를 스레드 B가 상태를 변경할 수 있기 때문에 스레드 A가 의도했던 것과는 다른 결과를 산출할 수도 있습니다. User1 스레드가 Calculator 객체의 memory 필드에 100을 먼저 저장하고 2초간 일시정지 상태가 됩니다. 그동안..
안녕하세요 오늘은 스레드(Thread) 2편입니다. 지난번 시간에 스레드란? 에서 Runnable로 스레드를 만들어 보았는데요. 지난 시간 내용입니다 :) 스레드 (Thread) 란? 우선 스레드를 공부하기 전 알고 넘어가야 할 개념이 있는데 프로세스(process)입니다. 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 시행되는데, 이것을 프로세스 itminco.tistory.com 오늘은 Thread를 하위 클래스로부터 생성해 보겠습니다. 작업 스레드가 실행할 작업을 Runnable로 만들지 않고, Thread의 하위 클래스로 작업 스레드를 정의하면서 작업 내용을 포함시킬 수 있습니다. Thread 클래스를 상속한 후 run() 메서드를 재정의(Overriding)해서 스레드가 ..
우선 스레드를 공부하기 전 알고 넘어가야 할 개념이 있는데 프로세스(process)입니다. 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 시행되는데, 이것을 프로세스라 합니다. 그리고 내부에서 코드의 실행 흐름을 스레드(Thread)라고 하죠. 운영체제는 두 가지 이상의 작업을 동시에 처리하는 멀티 태스킹을 할 수 있도록 CPU 및 메모리 자원을 프로세스마다 적절히 할당해주고, 병렬로 실행시킨다. 스레드(Thread)의 뜻은 한 가닥의 실이라는 뜻이다. 한 가지 작업을 실행하기 위해 순차적으로 코드를 실처럼 이어 놓았다 해서 유래된 이름이다. 멀티 프로세스는 OS(운영체제)에서 할당받은 자신의 메모리를 가지고 실행하기 때문에 각 프로세스는 서로 독립적이다. 따라서 하나의 프로세스에..
상수란? 변하지 않는 값을 말한다. 상수의 이름은 대문자를 주로 대문자를 사용하며, 여러 단어를 연결할 경우에는 _를 사용한다. 한번 선언한 상수는 값이 면하지 않기때문에 동시에 값을 지정하는 것이 좋다. 상수를 사용해야 하는 경우 - 값이 변하면 위험한 경우에 상수를 사용 - 값만 봤을때 무엇을 의미하는지 쉽게 파악할 수 없는 값에도 값 자체를 사용하기 보다는 상수를 사용
01. Hello world 문장 출력 기본적으로 이클립스에서 클래스를 만들때 main함수를 체크해주면 이런 모양의 코드가 자동적으로 작성이 됩니다. 그후 Systam.out.println("Hello World"); 입력해 줍니다. Systam.out.println("Hello World"); // Hello문장을 출력해라. ;(세미콜론)은 문장의 마침표 역활을 합니다. 여기서 .(도트)는 이클립스의 자동완성기능 입니다. 도트를 적어준후 (컨트롤 + 스페이스)를 누르면 자동완성기능이 실행 됩니다. System.ou.println();를 정리 Systam은 java.lang패키지 에 속하는 클래스이다. 따라서 import를 하지 않아도 바로 쓸수가 있다. java.lang.System 클래스 내부에 존대..