java HotSpot VM - use a two machine-word obnject header(cf: 3 word in the classic VM)
- to reduce space consumption (the average java object size is small) -> 보통 8% heap size 줄임
- first header : identity hash code and GC status information
- second header : a reference to the object's class
GC - fully accurate collector
http://download.oracle.com/javase/1.3/docs/guide/performance/hotspot.html
java HotSpot Architecture white paper :
Memory management in the java HotSpot VM : http://java.sun.com/j2se/reference/whitepapers/memorymanagement_whitepaper.pdf
JDBC의 경우,
Connection 인터페이스 : 서비스 인터페이스 역할 담당
driverManager.registerDriver : 제공자 등록 api
driverManager.getconnection : 서비스 접근 api
driver : 서비스 제공자 인터페이스
생성자
- construct overloading 대신 builder 패턴 활용
- 매개변수가 4개 이상일때?
싱글톤 특성유지 - private 생성자, enum 타입
finalizer : 객체가 사용할 수 없게 되는 시점부터 파이널라이저가 실행되는 시점까지 긴 시간이 소요
- finalizer 스레드가 app의 다른 스레드 보다 우선 순위가 낮게 실행되어서 그 객체들이 finalize 되지 않았던 점
객체의 참조만 비교할 경우, == 연산자 사용
instanceof 연산자를 사용해서 전달된 인자가 올바른 타입인지 확인
toString 메소드는 항상 오버라이드 하자
- @override public String toString() {...}
for-each
배열 인덱스 수에 맞게. 딱
int[] num={1,2,3,4,5}
for (int i:num) System.our.println(i);
결과 : 1 \n 2\n 3\n 4\n 5\n
항목 19. 타입을 정의할때만 인터페이스를 사용하자.
- 인터페이스 사용이유. : 상속의 유연성을 확보하기 위해서이지 않나., sub-class의 자유로운 구현?
- No. 상수 인터페이스
※ 상수 인터페이스? 메소드는 갖지 않으면서, static final 필드만으로 구성
. java.io.ObjectStreamConstants 존재
- 상수 인터페이스 안티패턴
항목 20. Tagged class 보다 클래스 계층을 사용하자
how - abstract class - subclass 1
- subclass 2
why
1. 가독성 저해, 복잡성 증가
2. 불필요한 메모리 할당과 해지 증가 -> overhead
ok~~~
※ switch-case : 런타임 에러 발생 가능..
항목 21. 전략을 표현할때 함수 객체를 사용하자???
Q - 전략? 함수객체?-함수포인터 지원?
자바는 함수포인터 지원x but. 객체 참조를 사용해서 유사한 효과를 얻을 수 있다?
Strategy 패턴? strategy interface
function object - 메소드 하나만 달랑 외부에 제공하는 클래스의 인스턴스는 사실상 메소드 포인터 역할?
항목 22. static 멤버 클래스를 많이 사용하자
nested class = innner class
- 다른 클래스 내부에 정의된 클래스
- 유형 : static 멤버 클래스, static이 아닌 멤버 클래스, anonymous 클래스 local 클래스
. static member class
.. outer class의 static 멤버 -> 다른 static 멤버와 동일한 접근 규칙준수
.. 용도 : public 지원 class
. static이 아닌 member class
.. 용도 : adapter 패턴 구현
. anonymous 클래스
.. 용도 : funtion object을 생성하는데 많이 사용
chapter 5. Generics
항목 23. 새로 작성하는 코드에서는 원천 타입을 사용하지 말자
- 용어
. 제네릭 클래스, 제네릭 인터페이스 : type parameter를 선언하고 있는 class or interface
. 제네릭 타입 : 제네릭 클래스와 인터페이스
- LIst interface : 하나의 타입 매개변수로 E, E는 list에 저장되는 요소의 타입
migration compatibility 이주 호환성
unbounded wildcard type
- generic type Set<E>의 unbounded wildcard type Set<?> ("임의 타입의 set"이라 읽음)
항목 24. 컴파일 경고 메시지가 없게 하자
@SuppressWarnings("unchecked") 주석을 사용해서 경고 메시지를 안 나타나게 억제할 수 있다.
항목 25. 배열보다는 list를 사용하자
항목 26. 제네릭 타입을 애용하자
항목 27. 제네릭 메소드를 애용하자.
제네릭화 대상 : static 유틸리티 메소드
항목 28. 바운드 와일드 카드를 사용해서 API의 유연성을 높이자
와일드 카드 : 타입 매개변수가 있을 자리에 ?
PECS - producer - extends, consumer-super
update : cvs repository -> local
checkout : cvs repository -> local
commit : local -> cvs repository
issue tracking system
- open tool : Matis, Bugzilla, Trac
-----
effective java
항목 29. 타입안전이 보장되는 혼성(heterogenenous) 컨테이너의 사용을 고려
- container : 객체를 저장하는 역할을 하는 클래스들을 포괄석으로 컨테이너..
- type token :
- 혼성 컨테이너 : 컨테이너를 매개변수화 하지 않고 저장되는 요소의 키 등을 매개변수화 함으로써 서로 다른 타입의 객체들이 같은 컨테이너에 저장 및 검색 될수 있는 것을 혼성 컨테이너라고 부름
제약사항
1. 클라이언트가 class 객체를 원천 타입의 형태로 사용하면, favorites 인스턴스의 타입 안전을 쉽게 훼손시킬수 있다는 것
2. non-reifiable type(비구체화 타입)에 사용될 수 없다.
- 구체화 타입 : 컴파일 시보다 런타임 시의 정보(타입과 같은)가 더 많은 타입. ex) 배열
- 비구체화 타입 : 컴파일시의 정보(특히 타입 관련한)는 많지만, 런타임 시의 정보가 거의 없는 타입
. 제네릭은 컴파일 시의 타입 정보는 있지만, 런타임시에는 그 정보가 없어지므로 비구체화 타입
chapter 6.
java 1.5 배포판 이후(현재 1.6) 추가된 타입 - enum 타입(열거형), annotation 타입(주석)
enum 타입 - 클래스임, final,
java print() 개행문자 - %n cf)c - \n
@override
public String toString() { return String.format("%s%d%n:, id, priority);}
public String toString() { return symbol;}