본문 바로가기

자바

(5)
[Java] static, 잘 알고 사용하자. Static클래스 레벨의 변수나 메소드, 블록을 정의할 때 사용된다.인스턴스 생성 없이 접근 가능하며, 모든 인스턴스에서 공유 가능JVM 에서 드러나는 특성메모리의 메소드 영역에 할당Static 변수와 static 메소드는 Static 메모리 영역에 존재프로그램 시작 시 메모리에 할당되고 프로그램 종료될 때까지 유지된다.객체가 생성되기 이전에 이미 할당이 되어 있다.메모리의 메소드 영역에 할당되기 때문이다.주된 사용법모든 인스턴스가 공통적으로 사용해야 하는 값이 존재할 때단점객체지향 프로그래밍 원칙과 상반된다.과도한 static 사용 시 메모리 누수의 원인이 될 수 있다.💡 메모리의 메소드 영역Static 영역을 포함하고 있으며 GC 의 관리 영역 밖에 존재한다.일반적으로 우리가 만든 Class는 St..
[JAVA] String Literal & String Object 현업에서 시스템 장애를 진단 작업을 하면서 어떤 객체가 가장 많이 생성되는지 점검 하는 경우 String 관련 객체는 몇백개 객체 중에서 상위 5개 안에 항상 포함된다고 한다. String 클래스에 대해 잘 알아야 하는 이유가 되겠다.String 은 어떻게 생겼을까?package java.lang;public final class String // (1) 자식클래스 양산 불가 implements java.io.Serializable, Comparable, CharSequence, Constable, ConstantDesc // (2)자식클래스 양산 불가누구나 사용할 수 있는 클래스클래스가 final 로 선언되어 있으므로 더이상 이 클래스를 확장할 수 없다.구현하는 인터페이..
[Java] JVM의 이해(3) - Garbage Collection GC, Garbage Collection JVM은 운영체제로부터 메모리를 활동받아 동작한다. 그렇다면 JVM은 메모리를 어떻게 관리할까? C 언어를 배웠을 때를 생각하면 변수에 메모리를 동적할당(malloc)하고 해제(free)하는 과정들이 있었지만 자바에서는 그렇지 않았다. 제네릭을 이용해 변수를 선언했을 때 동적으로 크기가 변화하기도 했다. 프로그램이 끝날 때 까지 할당된 메모리가 해제되지 않는다면 분명히 저장 가능한 메모리는 바닥날 것이고 OOME(Out Of Memory Error)가 발생하고 만다. 실제로도 자바가 발전하면서 애플리케이션 지연(Suspend) 현상이 두드러짐에 따라 GC가 개발되었다. GC는 필요하지 않은 메모리를 해제하여 사용할 수 있는 메모리를 확보해나간다. 필요한 메모리 영..
[Java] JVM의 이해(2) - 주요 메모리와 static 지난번 포스트에서 JVM의 구조에 대해 살펴봤다. 이번에는 JVM이 메모리를 어떻게 관리하는지 들여다보려고 한다. Runtime Data Area 중 주요 부분을 자세히 살펴보자. Method Area 클래스 정보를 처음 메모리 공간에 올릴 때 초기화되는 대상을 저장하기 위한 메모리 공간 Runtime Constant Pool 영역을 통해 상수 자료형을 저장하여 참조하고 중복을 방지한다. Heap Area 자바로 구성된 객체 및 JRE 클래스가 탑재되는 영역 String Pool, 실제 데이터를 가진 인스턴스, 배열 등 저장 JVM Stack Area 메소드 안에서 사용되는 값, 메소드의 매개변수, 지역변수, 리턴값 및 연산 시 일어나는 값 저장 PC Register 현재 수행중인 JVM 명령의 주소를 ..
[Java] 자바 가상 머신 이해(1) - JVM 구조 자바 개발자라면 모를 수 없는 키워드, JVM. 대학 졸업할 때까지 “JVM 은 자바로 작성한 클래스를 기계어로 번역해주는 역할을 한다” 정도로 이해하고 있었다. 하지만 기술 면접을 찾아보면 JVM에 대해 물어보는 경우가 많다. 학교 생활에 충실했느냐를 판단하고자 물어보는 줄 알고 적당히 알고 넘어가려고 하다가 성능과도 연결되는 것을 알게 되었다. jvm 메모리 영역의 구분과 각 영역의 역할에 대한 이해는 자바 성능 최적화에 중요하다. 이에 차근차근 공부한 내용을 정리해보고자 한다 개요 자바 가상 머신(Java Virtual Machine), JVM이 등장하기 이전 모든 컴퓨터 프로그램은 특정 운영체제에 맞게 작성되었다. 또한 프로그램 메모리는 소프트웨어 개발자가 관리했다. 이런 기존의 틀을 깨부수고 등..