Java

    [Java] String + null

    Java에서 String 타입과 null에 대해 '+' 연산을 수행하면 어떻게 될까?System.out.println("123" + null);// 결과123nullNPE가 발생할줄 알았는데, 123null이 출력된다..? 그 이유는 자바 doc을 보면 알 수 있다. If an operand of type String is null, then the string "null" is used instead of that operand. -> 어느 한 피연산자가 null이면 해당 피연산자 대신 문자열 "null"이 사용된다는 뜻이다. 만약 특정 문자열에 null이 더해질 때 NPE를 발생시키고 싶다면 String.concat() 메서드를 사용하면 된다."123".concat(null)null.concat("1..

    [Java] Suppressed Exception

    ✅ Suppressed ExceptionSuppressed Exception은 throw되지만 무시되는 예외를 말한다.예를 들어, try-catch-finally 문에서 try문에서 예외가 발생했을 때, catch문에서 예외를 받아 throw한 상황에서,finally 문에서도 예외가 발생했다면, try문에서 발생한 예외는 무시(suppressed)된다.'무시'된 예외는 실제로 throw되지 않아, stacktrace에 찍히지 않는다.-> 잘 이해가 안될 수 있는데, 다음 예제를 통해 더 자세하게 알아보자. ✅ try-catch-finally문에서 Suppressed Exceptionpublic static void demoSuppressedException(String filePath) throws IO..

    [Java] Comparator와 @FunctionalInterface

    함수형 인터페이스 공부하다가, Comparator 인터페이스 @FunctionalInterface 애노테이션이 붙은 것을 확인했다. @FunctionalInterface public interface Comparator { int compare(T o1, T o2); boolean equals(Object obj); ... } 해당 애노테이션은 Comparator가 함수형 인터페이스라고 명시하는 것이다. 그러나 함수형 인터페이스는 추상 메서드가 한 개여야 한다. 근데 Comparator는 위와 같이 추상 메서드가 두개다. -> 왜 Comparator를 함수형 인터페이스로 명시한걸까하는 의문이 들었다. 찾아보니, 모든 클래스는 Object 클래스를 상속받데, 만약 아무 것도 상속받지 않은 클래스가 있으면 ..

    [Java] public class

    자바에서 하나의 .java 파일에 여러 class를 만들 수 있지만, public class는 파일명과 동일한 이름의 클래스 하나만 만들 수 있다. ex) Member.java public class Member { } class Id { } class Name { } 하나의 자바 파일에 여러 클래스를 작성하는 경우에, 하나의 public(대표) class를 파일명과 동일하게 하는 것이 코드의 가독성에 도움이 된다고 한다. (자바를 만든 제임슨 고슬링이 이렇게 하라고 함..) +) 만약 public class의 클래스 이름이 파일명과 다르면 컴파일 오류가 발생한다. 참고로 Kotlin의 경우, 하나의 파일에 여러 class를 선언할 수 있고, 파일명과 꼭 맞출 필요도 없다. ex) Member.kt cl..

    [자바 최적화] 자바 언어의 성능 향상 기법

    [자바 최적화] 자바 언어의 성능 향상 기법

    자바 최적화 책 정리 자바 최적화(Optimizing Java) | 벤저민 J. 에번스 - 교보문고 자바 최적화(Optimizing Java) | 자바 애플리케이션 성능을 한 단계 높여줄 튜닝 이야기성능 튜닝은 실험과학이다. 추측과 구전 튜닝에 의존할 일이 아니다. 이 책은 복잡한 기술 스택을 다루는 중/고 product.kyobobook.co.kr 컬렉션 최적화 ✅ 자바 최적화의 한계 자바는 객체를 생성하면 객체를 가리키는 레퍼런스와(스택), 객체 자체(힙)를 따로 저장한다. -> 이렇게 레이아웃을 나누는 방식은 C/C++ 형식의 배열이나 벡터를 사용하는 것만큼 성능을 얻을 수 없게 한다. ✅ 자바 컬렉션 컬렉션이 애플리케이션 성능에 전체적인 영향을 끼칠 수 있다는 사실을 인식해야 한다. List 최적..

    [자바 최적화] JIT 컴파일의 세계로

    [자바 최적화] JIT 컴파일의 세계로

    자바 최적화 책 정리 자바 최적화(Optimizing Java) | 벤저민 J. 에번스 - 교보문고 자바 최적화(Optimizing Java) | 자바 애플리케이션 성능을 한 단계 높여줄 튜닝 이야기성능 튜닝은 실험과학이다. 추측과 구전 튜닝에 의존할 일이 아니다. 이 책은 복잡한 기술 스택을 다루는 중/고 product.kyobobook.co.kr JITWatch란? ✅ JITWatch 이 책의 필자 중 한 사람인 크리스 뉴랜드가 개인 프로젝트로 구축한 오픈 소스 자바FX 툴. -> 실행 중인 자바 애플리케이션이 생성한 핫스팟 컴파일 상세 로그를 파싱/분석하여 그 결과를 자바FX GUI 형태로 보여준다. -> 애플리케이션을 실행할 때 다음 플래그를 추가해야 JVM이 JITWatch에 입력할 로그를 생성..

    [자바 최적화] JVM의 코드 실행

    [자바 최적화] JVM의 코드 실행

    자바 최적화 책 정리 자바 최적화(Optimizing Java) | 벤저민 J. 에번스 - 교보문고 자바 최적화(Optimizing Java) | 자바 애플리케이션 성능을 한 단계 높여줄 튜닝 이야기성능 튜닝은 실험과학이다. 추측과 구전 튜닝에 의존할 일이 아니다. 이 책은 복잡한 기술 스택을 다루는 중/고 product.kyobobook.co.kr 바이트코드 해석 ✅ 평가 스택 JVM 인터프리터는 일종의 스택 머신처럼 작동한다. -> 작업할 값을 모두 평가 스택에 놓고 스택 최상단에 위치한 값을 변환하는 식으로 작동한다. JVM은 다음 세 공간에 주로 데이터를 담아 놓는다. 평가 스택: 메서드별로 하나씩 생성된다. 로컬 변수: 결과를 임시 저장한다(특정 메서드별로 존재한다). 객체 힙: 메서드끼리, 스..

    [자바 최적화] GC 로깅, 모니터링, 튜닝, 툴

    [자바 최적화] GC 로깅, 모니터링, 튜닝, 툴

    자바 최적화 책 정리 자바 최적화(Optimizing Java) | 벤저민 J. 에번스 - 교보문고 자바 최적화(Optimizing Java) | 자바 애플리케이션 성능을 한 단계 높여줄 튜닝 이야기성능 튜닝은 실험과학이다. 추측과 구전 튜닝에 의존할 일이 아니다. 이 책은 복잡한 기술 스택을 다루는 중/고 product.kyobobook.co.kr GC 로깅 개요 GC 로깅 켜기 ✅ GC 스위치 -Xloggc:gc.log -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps Flag Effect -Xloggc:gc.log GC 이벤트에 로깅할 파일을 지정한다. -XX:+PrintGCD..