Java

    JVM이 무엇인가?

    JVM이 무엇인가?

    이번 포스팅은 JVM이 무엇인지 어떻게 등장하게 되었는지 얘기해볼 것입니다. JAVA의 큰 장점 중 "운영체제에 독립적"이라는 점이 있습니다. 이것은 JVM의 역할로 인해 지니게된 장점입니다. JVM(Java Virtual Machine, 자바 가상 머신)은 무엇일까요? JVM이 무엇인지 얘기하기 전에 왜 나오게 됐는지 생각해보고자 합니다. 1. 기계어 현재와 달리 먼 과거로 돌아가서 "컴퓨터"와 처음 의사소통을 할 수 있었던 시절에는 지금처럼 소스코드로 컴퓨터에게 연산을 맡기는게 아닌, 개발자들이 직접 (컴퓨터가 알아먹을 수 있는) 0과 1을 이용해서 나름의 규칙을 통해 명령을 만들었습니다. 만약 1+3 수식 연산을 처리하도록 명령한다면, 2진법을 이용해서 01010101 00000001 0000100..

    익명 클래스(익명 객체)

    익명 클래스(익명 객체)

    이번 포스팅에서는 익명 클래스/객체에 대해 알아볼 것입니다. 목차는 아래와 같습니다. 목차 익명 클래스/객체의 정의와 사용하는 이유 익명 클래스/객체를 어떻게 사용하는가? 익명 클래스/객체를 사용하는 두가지 상황(Interface 구현, 추상 클래스 상속)과 주의 사항 일회성으로 사용되는 기능을 '일반클래스의 인스턴스로 생성한 것' => '익명 클래스/객체로 변환'하는 예제 익명 클래스/객체? 익명 클래스는 내부 클래스이자 이름이 없는 "익명" 클래스입니다. 즉, 이름이 없는 일회용 클래스로 클래스 정의와 인스턴스(객체) 생성을 동시에 할 수 있습니다. 익명 클래스(익명 객체)는 인터페이스를 구현하는 클래스 혹은 부모 클래스를 상속받는 클래스 중 일회성에 그치는 클래스를 이름이 없는 클래스로 생성하고 동..

    JVM(Java Virtual Machine)의 구조 - 메모리

    JVM(Java Virtual Machine)의 구조 - 메모리

    JVM은 클래스 로더 시스템, 메모리, 실행 엔진, 네이티브 메소드 인터페이스(JNI)+네이티브 메소드 라이브러리, 총 4개로 구성되어 있습니다. 한번에 다루기 많은 내용이라 나눠서 포스팅할 예정입니다. 메모리 (현재 포스팅) 클래스 로더 시스템과 실행 엔진 이번 포스팅은 '메모리'에 대해 다루겠습니다. Runtime Data 영역에는 메서드(Method 혹은 Class) 영역(Area), 스택(Stack) 영역, 힙(Heap) 영역, 네이티브 메서드(Native Method ) 스택 영역으로 구성됩니다. 1️⃣ 메서드(클래스) 영역 클래스가 메모리 상에 올라가는 영역입니다. JVM이 동작하고 클래스가 로드될 때 적재되서 프로그램이 종료될 때까지 저장됩니다. 구성 클래스 구조 FQCN(클래스 이름(풀패키..

    Stack과 Heap.. 그리고 Garbage Collection

    Stack과 Heap.. 그리고 Garbage Collection

    JVM의 구조는 클래스로더, 메모리 영역(Runtime Data Area), 실행 엔진, 가비지 컬렉션, 네이티브 메소드 인터페이스(JNI)+네이티브 메소드 라이브러리 로 구성되어있습니다. 그리고 Runtime Data Area 에는 Method Area, Heap, PC Registers, Stack, Native Method Stack 로 구성되어있습니다. (참고) 간단히, 스택과 힙 스택 컴파일 타임에 할당되는 메모리 영역입니다. 원시 타입의 데이터가 값과 함께 할당되고, Heap 영역에 생성된 Object 타입 데이터의 참조 변수(주소값)가 할당됩니다. 프로세스가 메모리에 로드 될 때 스택 사이즈가 고정되어 있어, 런타임 시에 스택 사이즈를 바꿀 수는 없습니다. 힙 런타임에 할당되는 메모리 영역입..

    JDK, JVM, JRE

    JDK, JVM, JRE

    세 용어는 자주 쓰이지만 그만큼 명확히 이해하지 못한 개념에 대해서 정리해놓으려 합니다. 워밍업 자바로 프로그래밍을 하려면 먼저 JDK를 설치해야합니다. JDK를 설치하면, 자바가상머신(JVM)과 자바 클래스 라이브러리(JRE)+ 자바를 개발하는데 필요한 실행파일들(JDK)이 설치됩니다. 쉽게 말해, JDK : JRE + 개발에 필요한 실행파일(javac.exe 등) JRE : JVM + 클래스 라이브러리 + 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일 JVM : 자바 가상 머신 더보기 bin 디렉터리의 주요 파일 1) javac.exe : 자바 컴파일러.자바 소스코드를 바이트 코드로 컴파일 합니다. 명령어 : (경로)\javac Hello.java 2) java.exe : 자바 인터프리..

    Exception과 Exception handler (+테스트 코드)

    Exception과 Exception handler (+테스트 코드)

    에러는 3가지 종류가 있습니다. 컴파일 에러: 컴파일 시에 컴파일러가 체크하는 예외로, 문법 문제, 소스코드 문제 등으로 발생합니다. (보통 IDE에서 빨간 줄로 알려줍니다.) 런타임 에러 : 컴파일은 성공했지만 프로그램 실행 중, 발생하는 문제입니다. 논리적 에러 : 컴파일도 되고, 실행도 되었지만 의도한 동작이 아닌 다른 동작을 하는 경우입니다. 만약 게임에서 목숨을 다썼는데 죽지않는 경우를 논리적 에러라고 할 수 있습니다. 런타임 에러는 다시 에러(Error)와 예외(Exception)로 나뉘어집니다. 에러는 OutOfMemoryError, StackOverFlowError 와 같은 발생 시 복구할 수 없는 심각한 문제를 의미합니다. 예외는 발생하더라도 수습할 수 있는 비교적 덜 심각한 문제를 말합..