Collection.toArray(new T[0]) vs .toArray(new T[size]) / ์ปฌ๋ ์ ์ ๋ฐฐ์ด๋ก ๋ณํํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฑ๋ฅ ๋น๊ต
Java์์ ์ปฌ๋ ์ ์ ๋ฐฐ์ด๋ก ๋ณํํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์๋ ํฌ๊ฒ toArray(new T[0])์ toArray(new T[size])๋ก ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
๋ ๋ฐฉ๋ฒ ๋ชจ๋ ์ปฌ๋ ์ ์ ๋ชจ๋ ์์๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํํ๋ค. ๊ทธ๋ฌ๋ ์ฑ๋ฅ๋ฉด์์ ์ฐจ์ด๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด๋ค ๋ฐฉ๋ฒ์ด ๋ ๊ถ์ฅ๋๋์ง ์์๋ณด๋ ค๊ณ ํ๋ค.
์ฑ๋ฅ ๋น๊ต ๋ฐ ๋ถ์
JMH(Java Microbenchmark Harness)๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ JDK ๋ฒ์ ์์ ๋ค์ํ ์ปฌ๋ ์
ํฌ๊ธฐ์ ๋ํด ์ด ๋ ๋ฐฉ๋ฒ์ ์ฑ๋ฅ์ ์ธก์ ํ ์ํฐํด์ด ์์ด ํต์ฌ๋ง ์์ฝํด๋ณด๋ คํ๋ค.
์ฑ๋ฅ ์ธก์ ๊ฒฐ๊ณผ, toArray(new T[0]) ๋ฐฉ๋ฒ์ด toArray(new T[size]) ๋ฐฉ๋ฒ๋ณด๋ค ์ผ๊ด๋๊ฒ ๋ ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์๋ค. ์ด๋ ๋ฐฐ์ด ์ด๊ธฐํ ๊ณผ์ ์์์ ์ฐจ์ด ๋๋ฌธ์ธ๋ฐ, toArray(new T[0])๋ ๋ด๋ถ์ ์ผ๋ก ์ต์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํตํด ๋ฐฐ์ด์ ์์ฑํ๊ณ , ์ด ๊ณผ์ ์์ ๋ฐฐ์ด์ "zero initialization"์ ํผํ ์ ์๋ค. ๋ฐ๋ฉด, toArray(new T[size])๋ ์ฌ์ ์ ํ ๋น๋ ๋ฐฐ์ด์ "zero initialization"์ ํผํ ์ ์๊ณ JVM์ด ์ด ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ํ ๋นํ๊ณ ๊ด๋ฆฌํด์ผ ํ๋ ๋ถ๋ด์ด ์กด์ฌํด ์ฑ๋ฅ์ด ๋ค์ ๋จ์ด์ง๋ค.
๊ฒฐ๋ก
๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ฌ์ ์ ์ง์ (.toArray(new T[size]))ํ๋ ๋์ , JVM์ ์ํด ๋์ ์ผ๋ก ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ ๋ฐฐ์ด์ ์ฌ์ฉํจ์ผ๋ก์จ, ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ์ด๊ธฐํ ๊ณผ์ ์ ์ต์ ํํ ์ ์๋ค. ๋ฐ๋ผ์, ์ปฌ๋ ์
์ ๋ฐฐ์ด๋ก ๋ณํํ ๋๋ toArray(new T[0]) ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค.
๋ ์์ธํ ์ฑ๋ฅ ๋น๊ต ๋ด์ฉ์ ํ๋จ ๋งํฌ ์ฐธ๊ณ