이론/Java

    xms 와 xmx 에 대하여

    xms Java 힙의 초기 크기를 제어 적절하게 조절하면 가비지 컬렉션 오버헤드를 줄여서 응답 시간을 개선할 수 있음. 너무 낮추면 가비지 콜렉션의 수가 많아질 수 있음. xmx Java 힙의 최대 크기를 제어 이 값을 늘리면 서버에서 사용 가능한 메모리가 늘어나고 가비지 컬렉션의 빈도가 줄어듬 늘리면 가비지 컬렉션이 발생할 때, 컬렉션의 지속시간이 길어짐 xms 와 xmx 를 같게 하여 사용하는 이유 xms 가 낮으면 잦은 가비지 컬렉션 호출로 성능 이슈 발생 가능 힙 메모리 사용량이 xms 설정 값에 다다르면 추가적으로 os 에 xmx 설정 값만큼 메모리를 할당받는 것인데, 이 과정에서 추가적 시간 소요와 성능 이슈가 발생 가능함 그렇기 때문에 처음부터 최대 힙 메모리를 사용한다.

    동등성 비교를 위해 equals(), hashCode() 를 함께 재정의하는 이유

    일단 동일성과 동등성에 대해서 한번 정리해보자면, 동일성 객체의 주소값을 비교하여 판별 동등성 객체의 값을 비교하여 판별 두 객체의 주소가 달라서 다른 객체라도 값이 같으면 동등함. 동등성을 지키기 위해서 해야할 것 equals() 재정의 기본 동작은 == (동일성 비교) 재정의를 통해 값 비교로도 결과를 반환하게 해야함 hashCode() 재정의 기본 동작으로 인스턴스가 저장된 가상머신의 주소를 반환함 Collection(HashSet, HashMap, HashTable) 의 경우 hash 를 이용하기에 equals() 만 재정의하면 같은 값이어도 주소가 달라 동등하지 않다고 판단하는 경우가 있을 수 있음.

    오버로딩과 오버라이딩

    오버로딩 같은 이름의 메서드를 매개변수의 타입, 갯수에 따라 여러 개로 정의할 수 있는 것 매개변수의 타입, 갯수가 다르다면 반환값을 다르게도 정의 가능함 반환값만 다르게는 안됨 매개변수가 다르다면 접근제어자도 다르게 지정 가능함 접근제어자만 다르게는 안됨 오버라이딩 상위 클래스의 메서드를 재정의하는 것 메서드의 이름, 매개변수, 반환값이 모두 같아야함 접근제어자의 경우 상위클래스보다 더 넓거나 같은 범위로만 지정 가능함

    원시 타입과 참조 타입

    원시타입과 참조타입을 비교해서 설명해보겠습니다. 원시타입 스택에서 메모리 공간이 할당되고 값을 저장합니다. null을 허용하지 않습니다. 값이 없는 경우 디폴트로 지정된 값을 담습니다. 참조타입 주소값은 스택에, 실제값은 힙에 존재합니다. 참조타입은 최소 2번의 메모리 접근을 해야해서 원시타입보다 접근 속도가 느립니다. null을 허용합니다.

    Checked exception 과 Unchecked exception

    Unchecked exception 는 런타임 예외를 상속받는 예외이고 Checked exception는 그 외의 예외들을 말합니다. Checked exception 는 컴파일 시점에 확인되므로 예외 처리(try catch 처리를 하거나 throws 를 명시) 가 강제됩니다. Checked exception의 본래 의도는 예외가 발생하면 발생한 지점에서 해결하고자 함입니다. 그렇기 때문에 예외 발생 시 트랜잭션이 롤백되지 않습니다. 반대로 Unchecked exception 은 롤백됩니다. 다만, Checked exception 을 실제로는 발생 지점에서 해결할 수 있는 경우가 많지 않아 예외를 상위로 던지는 경우가 빈번하게 일어납니다. 또, 예외를 던진다는 것을 명시해줘야하므로 코드량이 많아지고, 호출..