JAVA

    JVM GC(Garbage Collection) - 자바에서 메모리 관리하는 방법

    Garbage Collection(GC) Heap 영역의 오브젝트 중 stack 에서 도달 불가능한 (Unreachable) 오브젝트들은 가비지 컬렉션의 대상을 해제하여 메모리를 관리하는 것을 의미한다. public class Main { public static void main(String[] args) { String url = "https://"; url += "yaboong.github.io"; System.out.println(url); } } 1. url에 String 객체인 "https://" 주소 참조 2 "https://yaboong.github.io"이라는 String 객체를 하나 말들고 해당 주소 참조 (String은 불변 객체이므로 기존에 있던 문자에 덧붙이지 않음) 3. Unre..

    ==, equals(), hashcode() 비교

    아무 생각 없이보면 객체가 동일한지 비교한다고 생각할 수 있지만 자세히 보면 다르게 동작하는 것을 알수 있다. == 연산자 String str1 = "hello"; String str2 = "hello"; System.out.println(str1 == str2);//true String str3 = new String("hello"); String str4 = new String("hello"); String str5 = str4; System.out.println(str3 == str4);//false System.out.println(str4 == str5);//true 앞선 상수 풀 글을 읽으셨다면 str1과 str2는 동일한 객체의 주소값을 참조하고 있다는 것을 알 수 있습니다. str3과 st..

    String Constant Pool 란?

    위 그림은 JVM의 Runtime Data Area의 형태로 이중 Method Area의 Runtime Constant Pool에 String Constant Pool 이라는게 존재합니다. String을 생성하는 방법은 대표적으로 2가지가 있다. new 연산자 방식 literal을 이용한 방식 new 연산자 힙 영역에 새로운 String 객체를 만들고 이를 주소 값을 할당한다. literal String 객체는 내부적으로 intern() 메소드를 호출하게 된다. intern 메소드는 String Constant Pool 에서 해당 문자열이 존재하는지 검색하고 존재하면 해당 문자열의 주소값을 반환 존재하지 않으면 새로운 주소값을 할당하여 반환한다. 이 때문에 아래 그림처럼 동일한 문자열이더라도 ==비교가 ..

    JVM 스택과 힙 영역 저장 되는 것들

    운영체제 강의에서 스레드를 학습하면서 스택은 각 스레드가 독립적으로 가지며 힙 영역은 공유한다는 것을 알게되는다. 그래서 멀티 스레드 프로세싱을 할때 힙영역의 값을 동시에 접근하면 문제가 발생하고 이 때문에 동기화를 진행해야하는 경우가 있는데 그렇다면 자바에서는 무엇이 스택에 저장되고 무엇이 힙에 저장되는 것인지 알아보자. Stack Heap 영역에 생성된 Object 타입의 데이터의 참조값(참조 변수)이 할당된다. 원시타입의 데이터가 값과 함께 할당된다. 지역변수와 매개변수가 저장된다. 각 Thread 는 자신만의 stack 을 가진다. Heap Heap 영역에는 주로 긴 생명주기를 가지는 데이터들이 저장된다. (대부분의 오브젝트는 크기가 크고, 서로 다른 코드블럭에서 공유되는 경우가 많다) 애플리케이..

    자바가상머신(JVM) 이란

    일반적인 프로그램은 Windows또는 Linux같은 OS 위에서 실행된다. 하지만 자바 프로그램 같은 경우에는 OS 위의 JVM에서 실행이된다. 이렇게 JVM위에서 굳이 자바 프로그램을 돌리는 이유는 자바 프로그램을 OS에 상관없이 실행시키기 위함이다. 예를들어 Windows에서 동작하도록 구현된 워드 프로그램은 Linux에서 동작하지 않는다. 이 워드 프로그램을 Mac환경에서 돌리기 위해서는 Mac기반으로 다시 구현해야 한다. 하지만 자바 프로그램 같은 경우 어떤 OS 에서도 그에 맞는 JVM 다운로드를 통해 자바 프로그램을 실행 실킬 수 있다. Java Compiler 자바 소스(.java)코드를 Byte code(.class)로 변환하는 역할을 한다. Class Loader 자바 바이트 코드를 읽어..

    자바의 열거형(enum)

    열거형이란 서로 연관된 상수들의 집합으로 - 클래스처럼 보이게 하는 상수 - 서로 관련있는 상수들끼리 모아 상수들을 정의하는것 ​ ​ 자바의 열거형은 갖는 값 뿐만 아니라 타입까지 관리 하여 논리적인 오류를 줄임 값이 같아도 열거형 타입이 다르면 false (Enum 변수를 비교 할 때는 “==”를 사용합니다.) ​ enum변수에 미리 정의된 상수를 제외한 다른 값을 할당할수 없음 ​ ​ ​ static과 fianl이 내장되어 있어서 한번 정의 된 값을 바꿀수없으며 int 형의 변수처럼 switch문에서 사용가능 ​ ​ ​ ​ Enum 클래스의 메소드 ​ Class getDeclaringClass() 열거형의 Class 객체를 반환한다. String name() 열거형 상수의 이름을 문자열로 반환한다. ..