Java/Notion

· Java/Notion
자바의 하위 호환성 자바는 이전 버전이 상위 버전의 JVM에서 동작이 보장되지만 상위 버전의 기능을 하위 버전의 JVM에서 컴파일 할 수는 없다. 즉, 8버전의 기능을 17버전에서 구동할 수는 있어도 17버전에만 있는 기능을 8버전에서 구동할 수는 없다. JDK 1.1 Inner Class JavaBeans (자바로 작성된 소프트웨어 컴포넌트) Remote Method Invocation (분산 애플리케이션 구축 시 사용되며 java.rmi 패키지에 제공된다) Reflection J2SE 1.2 Swing GUI JIT Collection Framework J2SE 1.3 Hotspot JVM Java Naming and Directory Interface (데이터 및 객체를 발견하고 참고하기 위해 사용..
· Java/Notion
Warm Up을 알아보기 전에 Warm Up이 필요한 이유에 대해 알아보겠다. 서버 배포 직후의 Latency 발생 서버 배포 직후 사용자가 요청을 보냈을 때 유독 응답이 느린 문제가 발생한다. 이러한 문제가 발생하는 원인은 크게 두 가지가 있는데 바로 클래스 로더의 지연 로딩과 JIT 컴파일러의 동작 방식 때문이다. 클래스 로더의 지연 로딩 클래스 로더는 클래스 파일을 찾아 메모리에 적재해 실행 가능하게 만들어주는데 이러한 동작을 자바 애플리케이션이 시작될 때 모두 메모리에 적재하는 것이 아니라 각 클래스들이 직접적으로 필요한 시점에 로딩을 하는 지연 로딩 방식을 사용한다. 즉, 서버 배포 직후에 사용자가 요청을 보내면 해당 요청을 처리하기 위해 필요한 클래스들은 당연히 아직 메모리에 적재가 되지 않은..
· Java/Notion
Garbage Collection JVM의 Heap 영역 내에서 동적으로 할당했던 메모리 중 더 이상 사용하지 않는 메모리 객체들을 모아 주기적으로 자동으로 제거해주는 하나의 프로세스 개발자가 메모리를 직접 할당하고 해제하는 일에 신경을 쓸 필요가 없어져 개발에만 집중할 수 있게 해준다. GC는 만능일까? 세상에 완벽한 것은 없기 때문에 당연히 단점이 존재한다. 우선 GC는 개발자가 제어할 수 있는 영역이 아니기 때문에 GC가 메모리를 언제 해제하는지 알 수 없으며, GC가 동작하는 동안 관련 쓰레드를 제외한 모든 쓰레드가 멈추기(Stop The World) 때문에 오버헤드가 발생한다. 이런 STW 현상은 GC가 과하게 실행된다면 성능 하락으로 이어질 수도 있기 때문에 효율적으로 GC를 실행할 수 있게 ..
· Java/Notion
개요 우선 JVM 자체가 OS 위에서 자바 프로그램을 실행시켜 주는 역할을 수행해 운영체제에 독립적으로 실행할 수 있게 된다는 것은 당연히 알지만 JVM의 구성, 동작원리, 장단점 등에 대해 깊게 정리해보고자 한다. 컴파일 타입 환경에서의 자바 컴파일러 우리가 작성한 원시코드로 이루어진 java 파일은 JVM이 인식할 수 없기 때문에 자바 컴파일러가 java 파일을 자바 바이트코드로 이루어진 class 파일로 변환한다. (java파일 > 어휘 분석 > 구문 분석 > 의미 분석 > 중간 코드 생성 후 최적화 = class 파일) 실제로 프로그램을 실행한 후에 java 파일들과 이름은 같지만 확장자가 다른 class 파일이 생성된 것을 확인할 수 있다. cmd 창에서 직접 컴파일을 해봤으면 알 수도 있는데 ..
· Java/Notion
자바의 컴파일 과정 자바는 JVM을 통해 OS에 독립적으로 실행시킬 수 있는데 어떻게 이런 일이 가능한지 알기 위해 자바의 컴파일 과정을 살펴보겠습니다. public class Main { public static void main(String[] args) { System.out.println("Hello"); } } 우리는 보통 위와 같이 ".java" 확장자를 가진 파일에 소스 코드를 작성하고 인텔리제이나 이클립스 같은 IDE로 손쉽게 버튼을 클릭해 실행하거나 "javac"와 "java" 명령어를 통해서 실행할 수 있습니다. 컴파일 타임 환경 이 과정에서 소스 코드를 실행하기 위해 컴파일 하는 과정을 거치게 되는데 위 이미지와 같이 ".java" 파일이 컴파일러를 거쳐 ".class"파일이 생성되게..
· Java/Notion
기본 타입인 int, long 타입으로 표현할 수 없는 크기의 값을 처리할 때 사용 표현할 수 있는 범위가 크기 때문에 정밀한 작업을 할 때 사용 메서드 gcd() 두 값의 최대 공약수를 반환 add() 덧셈 substract() 뺄셈 multiply() 곱셈 divide() 나눗셈 valueOf() 문자열 혹은 숫자를 BigInteger 타입으로 변환 비교연산 직접적인 비교연산자 사용은 불가능 equals, compareTo 등을 사용해서 비교 변환 Number 클래스를 상속 받기 때문에 int, long, float, double, byte, short로 Value메서드를 사용해 변환 가능
· Java/Notion
T 타입 객체의 Wrapper 클래스 null을 포함한 모든 종류의 객체를 저장하기 때문에 null을 간접적으로 다룰 수 있음 NullPorinterException 발생을 예방할 수 있음 null 대신 빈 Optional 객체를 사용하는 것이 좋음 public final class Optional { private final T value; // null을 포함한 모든 종류의 객체를 저장가능 } Optional 객체 생성 Optional optVal = Optional.empty(); // 빈 객체로 초기화 Optional optVal - Optional.of(str); Optional optVal - Optional.of("abc"); Optional optVal - Optional.of(null);..
· Java/Notion
다양한 데이터 소스(컬렉션, 배열 등)를 표준화된 방법으로 다루기 위한 것 스트림 생성 중간연산 : 연산결과가 스트림인 연산으로 반복연산 가능 최종연산 : 연산결과가 스트림이 아닌 연산으로 스트림의 요소를 소모하기 때문에 단 한번만 적용 가능 스트림의 특징 스트림은 데이터 소스(원본)로부터 데이터를 읽기만하고 변경은 하지 않음 일회용이라 다시 사용하려면 스트림을 새로 생성해야 함 최종 연산 전까지 중간 연산이 수행되지 않음 작업을 내부 반복으로 처리함 (성능은 떨어지지만 코드가 간결해짐) 작업을 병렬로 처리하는 병렬스트림으로 멀티쓰레드와 비슷 오토박싱과 언박싱의 비효율을 처리하기 위해 기본형 스트림 지원 스트림 생성 // 컬렉션 >> 스트림 List list = Arrays.asList(1,2,4,5,3..
da9dac
'Java/Notion' 카테고리의 글 목록