최근 Tomcat7 에서 다음과 같이 코드를 바꾸었다.
성능은 오히려 System.arraycopy()가 좋은데, Arrays.copyOf를 쓰는 걸까 하는 생각이 들었다.
- System.arraycopy(applicationEventListenersObjects, 0,
- newListeners, 0, len);
+ Object[] newListeners = Arrays.copyOf(applicationEventListenersObjects,
+ len + 1);
왜 바꾸었나 API를 확인 해보니..
static |
copyOf(T[] original, int newLength) Copies the specified array, truncating or padding with nulls (if necessary) so the copy has the specified length. |
|
static |
copyOf(U[] original, int newLength, Class<? extends T[]> newType) Copies the specified array, truncating or padding with nulls (if necessary) so the copy has the specified length |
jdk5의 시절에는 아래와 같이 java generic를 이용하여 Array 에 대한 type별로 copy되는 array를 구하려는 메소드를 다음과 같이 만들었는데..
@SuppressWarnings("unchecked") private final <T> T[] copy(T[] source) { Class type = source.getClass().getComponentType(); T[] target = (T[])Array.newInstance(type, source.length); System.arraycopy(source, 0, target, 0, source.length); return target; }
JDK6부터는 Arrays.copyOf가 위의 메소드를 대신 하게 되었다.
톰캣 정신은 코드 유지보수성과 세련미가 우선이지. 민감한 성능차이는 아닌듯 싶다..
'java core' 카테고리의 다른 글
Class.getResource()와 Class.getClassLoader().getResource() 의 차이점 (0) | 2010.05.28 |
---|---|
sun.misc.GC 클래스 (0) | 2010.05.26 |
String의 intern 메소드에 대해서 잘 쓴 글 (0) | 2010.05.13 |
Tomcat6.0.26과 jdk7,jdk6을 사용하지 말 것 (0) | 2010.05.13 |
병렬 쓰레드 프로그래밍시 Thread Safety 확인하는 습관 갖기 (1) | 2010.05.07 |