Java 5

[이펙티브자바] 아이템7. 다 쓴 객체 참조를 해제하라.

핵심정리 어떤 객체에 대한 레퍼런스가 남아있다면 해당 객체는 가비지 컬렉션의 대상이 되지 않는다. 자기 메모리를 직접 관리하는 클래스라면 메모리 누수에 주의해야 한다. ex) 스택, 캐시, 리스너 또는 콜백 Stack 예시 public Object pop() { if (size == 0) throw new EmptyStackException(); Object result = elements[--size]; elements[size] = null; // 다 쓴 참조 해제 return result; } 참조 객체를 null 처리 하는 일은 예외적인 경우이며, 가장 좋은 방법은 유효 범위 밖으로 밀어내는 것이다. but, 예외적인 경우가 흔하다. public class Stack { private Object..

Java 2023.05.10

[이펙티브자바] 아이템 6. 불필요한 객체 생성을 피하라

아이템 6. 불필요한 객체 생성을 피하라 핵심정리 문자열 사실 동일한 객체라서 매번 새로 만들 필요가 없다. new String(”java”)를 사용하지 않고 문자열 리터럴 (”java”)를 사용해 기존에 동일한 문자열을 재사용하는 것이 좋다. jvm 에서 문자열을 다 풀에서 캐싱을 하고 있다. 해시맵에 한 번 만들어진 문자열들을 담아놓고, 동일한 문자열을 참조하려고 하면 이미 만들어 놓은 상수들의 풀에서 동일한 문자열을 참조하는 방법으로 재사용한다. 그래서 new String() 은 사용하지 않는게 좋다. 정규식, Pattern 생성 비용이 비싼 객체라서 반복해서 생성하기 보다, 캐싱하여 재사용하는 것이 좋다. 오토박싱 (auto boxing) 기본 타입(int)을 그것에 상응하는 박싱된 기본 타입(I..

Java 2023.05.09

[이펙티브자바] 완벽공략 18. 가비지 컬렉션

완벽 공략 18. 가비지 컬렉션기본 개념Mark, Sweep, CompactYoung Generation (Eden, S0, S1), Old Generation금방 죽는 young Generation, 최초에 Eden 영역, 그리고 꽉 차게 되면 S0, S1,오랫동안 살아 남는 Old generation Minor GC(Young generation), Full GC(old generation) Throughput, Latency (Stop-The-World), Footprint이 3가지 관점에서 각각의 GC 로직을 봐야 한다.Throughput: application 처리량(서버에 역량이 100 이라고 봤을 때, 100의 리소스를 다 사용하면 Throughput이 아주 좋다. 할 일을 다 하기 때문에...

Java 2023.05.09

[이펙티브자바] 아이템4. 인스턴스화를 막으려거든 private 생성자를 사용하라

아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라 정적 메서드만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 클래스가 아니다. Helper 성격의 factory들. public class UtilityClass { public static String hello() { return "hello"; } public static void main(String[] args) { String hello = UtilityClass.hello(); // 이때 인스턴스로 사용되는 것을 추천하지 않는다. } } 추상 클래스로 만드는 것으로는 인스턴스화를 막을 수 없다. ⬇️ 아래의 코드처럼 생각할 수 있다. public abstract class UtilityClass { public st..

Java 2023.04.21

[Java] JVM 과 구조

더 자바 JVM (Java Virtual Machine) 자바 가상 머신으로 .class 파일을 os에 특화된 코드로 변환하여 실행한다. 바이트 코드를 실행하는 표준이자 (JVM 자체는 표준) 이자 구현체다. jvm 밴더: 오라클, 아마존,….. 특정 플랫폼에 종속적이다. JRE (Java Runtime Environment): JVM + 라이브러리 자바 애플리케이션을 실행할 수 있도록 구성된 배포판. JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일 JDK (Java Development Kit): JRE + 개발툴 JRE + 개발에 필요할 툴 오라클은 자바 11부터 JDK만 제공하며 JRE 따로 제공 x 자바는 오라클에서 만든 Oracle JDK 11 버전부터 ..

Java 2022.06.17