Mais conteรบdo relacionado
Semelhante a From Java code to Java heap_SYS4U I&C (20)
From Java code to Java heap_SYS4U I&C
- 1. From Java code to Java heap
Java ์ดํ๋ฆฌ์ผ์ด์
์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๋ฐฉ์์ ์ดํดํ๊ณ ์ต์ ํํ๋ ๋ฐฉ๋ฒ
์ ์: Chris Bailey (baileyc@uk.ibm.com), Java Service Architect, IBM
์์ฑ์ผ: 2012 ๋
2 ์ 29 ์ผ
๋์: ์ค๊ธ ๊ฐ๋ฐ์
๋ฒ์ญ: ๊นํ์ ์์
๋ฒ์ญ์ผ: 2013 ๋
02 ๋
12 ์ผ
์๋ฌธ ์ฃผ์: http://www.ibm.com/developerworks/java/library/j-codetoheap/index.html
์ดํ๋ฆฌ์ผ์ด์
์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจ์จ์ ๋์ด๋ ๋ฌธ์ ๊ฐ ๊ทธ๋ฆฌ ์๋ก์ด ๊ฒ์ด ์๋์๋ ๋ถ๊ตฌํ๊ณ ,
์ด ๋ด์ฉ์ ์ ๋๋ก ์ดํดํ๊ณ ์๋ ์ฌ๋์ด ๊ทธ๋ฆฌ ๋ง์ง ์๋ค. ์ด ๋ฌธ์๋ Java ํ๋ก์ธ์ค๊ฐ ๋ฉ
๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก๋ถํฐ ์์ํด์, ๊ฐ๋ฐ์๊ฐ ์์ฑํ Java ์ฝ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ
๋ ๋ฐฉ์๊น์ง๋ฅผ ์์ธํ ๋ค๋ฃฐ ๊ฒ์ด๋ค. ๋ง์ง๋ง์ผ๋ก, ์ฝ๋๋ฅผ ์์ฑํ ๋ โ ํนํ HashMap๊ณผ
ArrayList๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ถ์์- ๋ณด๋ค ํจ์จ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ
์ ๋ํด ์ธ๊ธํ ๊ฒ์ด๋ค.
- 2. ๋ฐฐ๊ฒฝ์ง์: Java ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๋ฐฉ๋ฒ
๋ช
๋ น์คํ์ค(Command Line)์์ java ๋ช
๋ น์ด๋ฅผ ์ด์ฉํ์ฌ Java ์ดํ๋ฆฌ์ผ์ด์
์ด๋ (WAS๋ฑ
๊ณผ ๊ฐ์) Java ๊ธฐ๋ฐ ๋ฏธ๋ค์จ์ด๋ฅผ ์คํํ๋ฉด Java ๋ฐํ์์ ์๋ก์ด OS ํ๋ก์ธ์ค๋ฅผ ํ๋ ์
์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ OS ํ๋ก์ธ์ค๋ผ๋ ๋ถ๋ถ์์ C ๊ธฐ๋ฐ ํ๋ก๊ทธ๋จ๊ณผ ์๋ฒฝํ๊ฒ ๋์ผํ๋ค.
์ฌ์ค, JVM์ ์๋น ๋ถ๋ถ์ C ํน์ C++๋ก ์์ฑ๋์ด ์์ผ๋ ๋น์ฐํ ์ผ์ด๊ธฐ๋ ํ๋ค. ํ๋์
OS ํ๋ก์ธ์ค๋ก์, Java ๋ฐํ์์๋ ๋ชจ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค๊ณผ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ ํ์ด
์๋ค. ์ํคํ
์ฒ์ ์ํด ์ ๊ณต๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ํฌ๊ธฐ(Addressability) 1 ์ OS์ ์ํด ์ ๊ณต๋
๋ ์ฌ์ฉ์ ์์ญ(User Space)์ด ๊ทธ๊ฒ์ด๋ค.
์ํคํ
์ฒ๊ฐ ์ ๊ณตํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ํฌ๊ธฐ๋ ํ๋ก์ธ์์ ๋นํธ(bit) ํฌ๊ธฐ์ ์ํด ๊ฒฐ์ ๋๋ค. ํ
๋ก์ธ์์ ๋นํธ ํฌ๊ธฐ๋ 32bit, 64bit ๋ฑ๊ณผ ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๋งํ๋ฉฐ IBM ๋ฉ์ธํ๋ ์์ ๊ฒฝ์ฐ์๋
31bit ํฌ๊ธฐ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค. ํ๋ก์ธ์๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๋นํธ์ ํฌ๊ธฐ๋ ํ๋ก์ธ์๊ฐ ํ
๋นํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ๋ค. 32bit ํ๋ก์ธ์๋ 2์ 32์ ๊ณฑ ํฌ๊ธฐ(2^32), ์ฆ
4,294,967,296bit(ํน์ 4gigabytes)์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ์ ์๊ณ , 64bit ํ๋ก์ธ์๋ 2์ 64
์ ๊ณฑ ํฌ๊ธฐ(2^64), ์ฆ ์ค๋ก ์์ฒญ๋ ํฌ๊ธฐ์ธ, 18,446,744,073,709,551,616 bit(ํน์
16exabytes2)๋ฅผ ํ ๋นํ ์ ์๋ค.
ํ๋ก์ธ์ ์ํคํ
์ฒ์ ์ํด ์ ๊ณต๋๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ญ ์ค ์ผ๋ถ๋ OS์ kernel๊ณผ C ๋ฐํ์
์ ์ํด ์ฌ์ฉ๋๋ค. (JVM์ด C์ C++๋ก ์์ฑ๋์์ผ๋ฏ๋ก C ๋ฐํ์์ ์ํ ์์ญ์ด ํ์ํ
๋ค.) OS์ C ๋ฐํ์์ด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋ ์ด๋ค OS๋ฅผ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ ๊ฒฐ์ ๋
๋๋ฐ, ์๋์ฐ์ ๊ฒฝ์ฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก 2GB๋ฅผ ์ฌ์ฉํ๋ค. 3 ์ด๋ฅผ ์ ์ธํ, ์ฌ์ฉ์ ์์ญ์ด๋ผ ๋ถ๋ฆฌ
๋, ๋๋จธ์ง ํ ๋น ๊ฐ๋ฅํ ์์ญ์ด ์ค์ ํ๋ก์ธ์ค๊ฐ ์คํ๋๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ
1
Addressability๋ ์ฌ์ ์ ์ผ๋ก โ์ฃผ์ ์ง์ ๊ฐ๋ฅ๋โ๋ผ๊ณ ํ๋ฉฐ, โ์ฅ์น ๊ณต๊ฐ์์ ํ ๋นํ ์ ์๋ ์ฃผ์
๋ค์ ์โ๋ผ๊ณ ์ดํดํ๋ฉด ๋๋ค.
2
1 Exabyte๋ 1018byte์ด๋ค. ์ฆ, 264bit = 16 * 1018B = 16 * 109GB = 16 * 106TB = 16 * 103PB =
16EB ์ด๋ค. Exabyte์ ๊ด๋ จ๋ ๋ํ ์์ธํ ๋ด์ฉ์ http://en.wikipedia.org/wiki/Exabyte๋ฅผ ์ฐธ๊ณ ํ๋ผ.
์ฐธ๊ณ ๋ก, 1KB๋ 1000B์ด๊ธฐ๋ ํ๊ณ 1024B์ด๊ธฐ๋ ํ๋ค. ์ด ๊ฐ์ ์ฌ์ฉ๋๋ โ๋งฅ๋ฝโ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค.
3
์๋์ฐ OS๊ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๊ณ ์ถ์ผ๋ฉด
http://blogs.technet.com/b/sankim/archive/2009/05/21/4gb-32-windows.aspx์ ์ฐธ๊ณ ํ๋ผ.
- 3. ๊ณต๊ฐ์ด ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก, Java ์ดํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ, ์ฌ์ฉ์ ์์ญ์ด Java ํ๋ก์ธ์ค์ ์ํด ์ฌ์ฉ๋ ์ ์
๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋๋๋ฐ, ์ด ์์ญ์ ๋๋ค์ ๋ ๊ฐ์ง ์์ญ, ์ฆ Java ํ(heap 4 )๊ณผ native(non-
Java) ํ์ผ๋ก ๊ตฌ๋ถ๋๋ค. JVM์ด ๊ด๋ฆฌํ ์ ์๋ Java ํ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋ Java ํ๋ก์ธ์ค๋ฅผ
๊ตฌ๋ํ ๋ ์ค์ ํ๋ โXms ๊ฐ๊ณผ โXmx ๊ฐ์ ์ํด ๊ฒฐ์ ๋๋ค 5. ๊ทธ๋ฆผ 1์ 32bit Java ํ๋ก์ธ
์ค๊ฐ ์คํ๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น๋ฅผ ๊ฐ๋ต์ ์ผ๋ก ๋ํ๋ธ ๊ฒ์ด๋ค.
๊ทธ๋ฆผ 1. 32bit Java ํ๋ก์ธ์ค๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น ์
์ ๊ทธ๋ฆผ์์ ์ ์ ์๋ฏ์ด, OS์ C ๋ฐํ์์ด 4GB์ค 1GB ๊ฐ๋์, Java ํ์ด ์ฝ 2GB, ๊ทธ
๋ฆฌ๊ณ Native ํ์ด ๋๋จธ์ง๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค. ์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด JVM๋ ์ผ์ ๋ถ๋ถ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ
์ฌ์ฉํ๊ณ ์๋๋ฐ, OS ์ปค๋์ด๋ C ๋ฐํ์๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก JVM๋ ์คํ๋๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ๊ฐ
ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค. (๊ทธ๋ฆฌ๊ณ JVM์ด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ Native ํ์ ์ผ๋ถ์ด๋ค.)
4
Heap์ ์๋ ํธ๋ฆฌ ๊ธฐ๋ฐ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋์ด๋ค. Java๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ก Heap์ ์ด์ฉํ ์ด์ ์ ๋
ํด์๋ ๋ค์์ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค. http://stackoverflow.com/questions/2787611/why-does-java-uses-
heap-for-memory-allocation
5
-Xms๋ ํ ๋ฉ๋ชจ๋ฆฌ ์ต์๊ฐ์ด๊ณ โXmx๋ ํ ๋ฉ๋ชจ๋ฆฌ ์ต๋๊ฐ์ด๋ค. -Xmx๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น
ํด์ผ ํ๋ ๊ฒฝ์ฐ OutOfMemoryError๊ฐ ๋ฐ์ํ๋ค. ๋ฌผ๋ก Java์์ OutOfMemoryError๊ฐ ๋ฐ์ํ๋ ์ด
์ ๋ ์ด ๋ฟ๋ง์ด ์๋๋ค. Memory Leak์ด ๋ฐ์ํ์ฌ GC๋ฅผ ์ํํ์ฌ๋ ๋ ์ด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ํ ์
์์ ๋, Thread๋ฅผ ๋ ์ด์ ์์ฑํ ์ ์์ ๋, File์ ๋ ์ด์ ์์ฑํ ์ ์์ ๋ ๋ฑ๋ฑ ๋งค์ฐ ๋ค์
ํ ์ํฉ์์ OutOfMemoryError๊ฐ ๋ฐ์ํ ์ ์๋ค.
- 4. Java ๊ฐ์ฒด ๋ถ์6
new ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ Java ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ๋, ์ค์ ๋ก๋ ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๋
๊ฒ๋ณด๋ค ํจ์ฌ ๋ง์ ์ผ๋ค์ด ์ผ์ด๋๋ค. ์๋ฅผ ๋ค์ด, Java์์ ๊ฐ์ฅ ์์ Object ์ค ํ๋์ธ
Integer ํด๋์ค์ int๊ฐ์ ์
๋ ฅํ๊ธฐ ์ํด ํ ๋น๋๋ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์๊ฒ ๋๋ค๋ฉด
๊น์ง ๋๋ ๊ฒ์ด๋ค. ๋ฐ๋ก ์๊ธฐํ๋ฉด, ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์๋ int ๊ฐ์ ๋ค ๋ฐฐ์ ํด๋นํ
๋ 16byte๊ฐ ํ์ํ๋ค.7 ์ด ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๋ JVM์ด Integer๋ผ๋ ํด๋์ค์ ๋ด
์ฉ์ ๊ธฐ์ ํ๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ8 ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ๊ฐ์ฒด์ ๋ฉํ๋ฐ์ดํฐ ์ ๋ณด๋ JVM์
๋ฒ์ ์ด๋ ๋ฒค๋์ ๋ฐ๋ผ ์ฝ๊ฐ์ฉ ๋ค๋ฅด์ง๋ง, ๋์ฒด๋ก ๋ค์ ์ธ ๊ฐ์ง ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์๋ค.
๏ท Class: ํด๋์ค์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ํฌ์ธํฐ๋ก, ๊ฐ์ฒด์ ์ ํ์ด ์ ํ์๋ค. ์ด ๊ฒฝ์ฐ
java.lang.Integer ํด๋์ค๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
๏ท Flags: ๊ฐ์ฒด์ ์ํ๋ฅผ ์์ ํ๋ ์ ๋ณด์ ๋ชจ์. ๊ฐ์ฒด์ hashcode ๊ฐ์ด ์๋ค๋ฉด ์ด๊ณณ์
์ ์ฅ๋๋ค. ๋, ์ด ๊ฐ์ฒด๊ฐ ๋ฐฐ์ด์ธ์ง ์๋์ง์ ๋ํ ์ ๋ณด๋ ํฌํจํ๋ค.
๏ท Lock: ๊ฐ์ฒด์ ๋ํ ๋๊ธฐํ ์ ๋ณด. ํ์ฌ ์ด ๊ฐ์ฒด๊ฐ ๋๊ธฐํ๋๊ณ ์๋์ง์ ๋ํ ์ ๋ณด๋ฅผ
๋ํ๋ธ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด์ ๋ฉํ๋ฐ์ดํฐ ๋ค๋ก ๊ฐ์ฒด ์ธ์คํด์ค์ ํฌํจ๋์ด ์๋ ํ๋์ ๊ฐ์ ์ค์ ๊ฐ์ฒด
์ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๋ค. ์ด java.lang.Integer ํด๋์ค์ ์์์๋ intํ ๋ฐ์ดํฐ ํ๋๊ฐ ๋ฉ
ํ๋ฐ์ดํฐ ๋ค์ ์ถ๊ฐ๋ ๊ฒ์ด๋ค. ์ฆ, 32bit JVM์์ Integer ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค๋ฉด
๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ ๊ฒ์ด๋ค.
6
์๋ฌธ์์๋ โObjectโ๋ผ๋ ๋จ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ์ด ์ํฉ์์๋ โ์ธ์คํด์คโ๋ผ๋ ์๋ฏธ๋ก ๋ฐ์๋ค
์ด๋ ๊ฒ์ด ์ณ์ ์ ์๋ค. Java ์ธ์ด์์๋ Object๋ผ๋ ๋จ์ด์ ์๋ฏธ๊ฐ ์ฌ๋ฌ ๊ฐ์ง๋ก ์ฌ์ฉ๋๊ณค ํ๋
๋ฐ, ์์ฑ๋์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋ ๊ฐ์ฒด๋ ์ธ์คํด์ค๋ผ๋ ์ฉ์ด๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํ ๊ฒ์ด๋ค.
7
์ด๋ฏธ ์๊ณ ์๊ฒ ์ง๋ง Java์์ ์์์๋ฃํ์ธ int์ ํฌ๊ธฐ๋ 4byte์ด๋ค.
8
๋ฉํ๋ฐ์ดํฐ(Metadata)๋ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ค๋ช
ํ๊ธฐ ์ํ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ค. ๋ฉํ๋ฐ์ดํฐ์ ์๋ก๋,
์ฌ์ง ์ด๋ฏธ์ง ํ์ผ์ exif ์ ๋ณด, ์นํ์ด์ง์ meta-tag๋ค, ์ถํ๋ ๋์์ ISBN ๋ฑ์ ๋ค ์ ์๋ค.
- 5. ๊ทธ๋ฆผ 2. 32bit Java ํ๋ก์ธ์ค์์์ java.lang.Integer ๊ฐ์ฒด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น ์
๊ทธ๋ฆผ2์์ ๋ณผ ์ ์๋ฏ์ด, Integer ํด๋์ค์ ๋ฉํ๋ฐ์ดํฐ ๋๋ฌธ์, 32bit์ int ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
ํ๊ธฐ ์ํด ์ด 128bit์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
Java ๊ฐ์ฒด ๋ฐฐ์ด ๋ถ์
์ด๋ค ๋ฐ์ดํฐ(์๋ฅผ ๋ค์ด int ๊ฐ)์ ๋ํ ๋ฐฐ์ด์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ ์ผ๋ฐ์ ์ธ Java ๊ฐ์ฒด์ ๊ฑฐ
์ ๋น์ทํ๋ค. ์ฃผ์ํ ์ฐจ์ด์ ์ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ๋ฉํ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๋ค๋ ์ ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๊ฐ์ฒด ๋ฐฐ์ด์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ ๋ค์ ์์๋ค๋ก ๊ตฌ์ฑ๋๋ค.
๏ท Class: ํด๋์ค์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ํฌ์ธํฐ๋ก, ๊ฐ์ฒด์ ์ ํ์ ์์ ํ๋ค. ์ด
๊ฒฝ์ฐ์๋ int ํ์ ๋ฐฐ์ด์ธ๋ฐ, ์ฆ int[] ํด๋์ค๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
๏ท Flags: ๊ฐ์ฒด์ ์ํ๋ฅผ ์์ ํ๋ ์ ๋ณด์ ๋ชจ์. ๊ฐ์ฒด์ hashcode ๊ฐ์ด ์๋ค๋ฉด ์ด๊ณณ์
์ ์ฅ๋๋ค. ๋, ์ด ๊ฐ์ฒด๊ฐ ๋ฐฐ์ด์ธ์ง ์๋์ง์ ๋ํ ์ ๋ณด๋ ํฌํจํ๋ค.
๏ท Lock: ๊ฐ์ฒด์ ๋ํ ๋๊ธฐํ ์ ๋ณด. ํ์ฌ ์ด ๊ฐ์ฒด๊ฐ ๋๊ธฐํ๋๊ณ ์๋์ง์ ๋ํ ์ ๋ณด๋ฅผ
๋ํ๋ธ๋ค.
๏ท Size: ๋ฐฐ์ด์ ํฌ๊ธฐ
๊ทธ๋ฆผ 3์์ intํ ๋ฐฐ์ด์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ์ธํ ์ ์๋ค.
๊ทธ๋ฆผ 3. 32bit ํ๋ก์ธ์์์์ int ํ ๋ฐฐ์ด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น ์
์ ๊ทธ๋ฆผ์์ ๋ณผ ์ ์๋ฏ์ด, 32bit์ int ์๋ฃ๋ฅผ ์ํด ์ด 160bit์ ์๋ฃ๋ฅผ ์ ์ฅํด์ผ ํ๋
๊ฒ์ ์ ์ ์๋ค. ๊ทธ๋์, ํ๋์ ๋ฐ์ดํฐ๋ง ์ ์ฅํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ๋ฐฐ์ด์ ์ด์ฉํ ๊ฒฝ์ฐ๊ฐ ์
์์๋ฃํ์ ๋ํผ ํด๋์ค(Byte, Integer, Long๊ณผ ๊ฐ์)๋ค์ ์ด์ฉํ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ
๋ฆฌ๋ฅผ ํ์๋ก ํ๊ฒ ๋๋ค.
- 6. ์ข ๋ ๋ณต์กํ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ๋ถ์
์ ๋๋ก ๋ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์บก์ํ(๋ฐ์ดํฐ๋ฅผ ์จ๊ธฐ๊ณ ๊ทธ๊ฒ์
์ ์ดํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณต)์ ์์(์ค์ ์์
์ํ์ ๋ด๋นํ๋ ๋์ฐ๋ฏธ ํด๋์ค๋ฅผ
์ ๊ณต)์ ์ ์ ํ ์ ์ด์ฉํด์ผ ํ๋ค๊ณ ๋ค ํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ณธ์ง์ ์ผ๋ก, ์บก์ํ์ ์์์ ์ด์ฉํ
๋ค๋ ๊ฒ์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฌ๋ฌ ๊ฐ์ง์ ํด๋์ค๋ค์ด ์๋ก ์ฐ๊ด๋์ด ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฌ์ด ์๋ก java.lang.String ํด๋์ค๋ฅผ ์ดํด๋ณด์. String ํด๋์ค ๋ด์ ์บก์ํ๋์ด String ํด
๋์ค์ ์ํด ๊ด๋ฆฌ๋๋ ๋ฐ์ดํฐ๋ char ๋ฐฐ์ด์ด๋ค. 32bit ํ๋ก์ธ์์์ String ๊ฐ์ฒด๋ ๋ค์๊ณผ
๊ฐ์ด ํํ๋๋ค.
Figure 4. 32bit ํ๋ก์ธ์์์์ String ํด๋์ค์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น ์
์ ๊ทธ๋ฆผ์์ ๋ณด์ด๋ฏ, java.lang.String ํด๋์ค์๋ ๊ธฐ๋ณธ์ ์ธ ๊ฐ์ฒด ๋ฉํ๋ฐ์ดํฐ ์ธ์๋ ๋ค
๊ฐ์ง ํ๋๋ค์ด ํฌํจ๋์ด ์๋๋ฐ, hash๊ฐ(hash), ๋ฌธ์์ด์ ๊ธธ์ด(count), ๋ฌธ์์ด ๋ฐ์ดํฐ์ ์
์์ (offset), ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ฌธ์์ด ๋ฐฐ์ด์ ๋ํ ์ฐธ์กฐ(value)์ด๋ค.
์ด ๋ง์ ์ฌ๋ ๊ฐ์ ๋ฌธ์์ด(128bit์ char ๋ฐ์ดํฐ9)๋ฅผ ์ ์ฅํ๊ธฐ ์ํ String ํด๋์ค๋ฅผ ์ํด
์ด 224bit์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๊ณ String ํด๋์ค๊ฐ ํฌํจํ๊ณ ์๋ ๋ฌธ์์ด ๋ฐฐ์ด๊น์ง ํฉ์น๋ฉด
์ด 480bit๊ฐ ํ ๋น๋์ด์ผ ํ๋ค๋ ๋ง์ด๋ค. ์ฆ, 128bit๋ฅผ ์ํด 480bit๊ฐ ํ์ํ๋ค๋ ์๊ธฐ์ด๊ณ ,
์ ๋ฆฌํ๋ฉด String ํด๋์ค์ ์ค๋ฒํค๋ ๋น์จ์ 3.75:1์ด ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋ณต
์กํ๋ฉด ๋ณต์กํ ์๋ก ์ค๋ฒํค๋๋ ๋ ์ปค์ง๋ค. ์ด ๋ถ๋ถ์ ๋ํด์๋ ๋ค์ ์ข ๋ ์์ธํ ๋ค๋ฃฐ
๊ฒ์ด๋ค.
9
C์ ๋ฌ๋ฆฌ Java์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก 1char = 2byte = 16bit์ด๋ค. ๊ทธ๋์ 8char = 16*8bit = 128bit์
์ ์ ์ ์๋ค. ๋ง์ฝ java๋ฅผ ์คํํ ๋, -XX:+UseCompressedStrings ์ต์
์ ์ด์ฉํ๋ค๋ฉด, (๋ฌธ์์ด
์ ์ฅ์ด ASCII ์ฝ๋์ ์ ํ๋๊ธด ํ์ง๋ง) 1byte = 1char๋ก ์ฌ์ฉํ ์๋ ์๋ค. ์ด์ ๋ํ ์์ธํ ๋ด
์ฉ์ http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html์ ์ฐธ์กฐํ๊ธฐ
๋ฐ๋๋ค.
- 7. 32-bit ์ 64-bit Java ๊ฐ์ฒด๋ค
์ง๊ธ๊น์ง๋ 32bit ํ๋ก์ธ์ค์ ์ ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ, ๋ฐฐ์น, ์ค๋ฒํค๋์ ๋ํด ๋ค๋ค๋ค. ์ด
๋ฏธ [๋ฐฐ๊ฒฝ์ง์: Java ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๋ฐฉ๋ฒ] ์ฅ์์ ์ธ๊ธํ ๋ฐ ์์ง๋ง, 64bit ํ๋ก์ธ
์๋ 32bit ํ๋ก์ธ์์ ๋นํด ์ฌ์ฉํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์๊ฐ ์์ฒญ๋๊ฒ ํฌ๋ค. Java๊ฐ
64bit ํ๋ก์ธ์ค๋ก์ ์คํ๋๋ฉด, ๋ช๋ช ๋ฐ์ดํฐ ํ๋๋ค, ํนํ ๊ฐ์ฒด ๋ฉํ๋ฐ์ดํฐ์ ๊ฐ์ ์ ๋ณด๋ฅผ
์ํ ํ๋์ ํฌ๊ธฐ๋ 64bit์ ๋ง๊ฒ ์ฆ๊ฐ๋์ด์ผ ํ๋ค. ๋ฌผ๋ก int๋ byte, long๊ณผ ๊ฐ์ ์ผ๋ฐ์
์ธ ๋ฐ์ดํฐ ์ ํ๋ค์ ํฌ๊ธฐ๋ ๋ณ๊ฒฝ๋์ง ์๋๋ค. ๊ทธ๋ฆผ 5๋ฅผ ๋ณด๋ฉด 64bit์์ Integer๊ฐ์ฒด์
int ๋ฐฐ์ด์ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น๋ฅผ ํ์ธํ ์ ์๋ค.
Figure 5. 64bit ํ๋ก์ธ์์์์ Integer ํด๋์ค์ int ๋ฐฐ์ด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น ์
์ ๊ทธ๋ฆผ์ 64bit ํ๋ก์ธ์ค์์ Integer ๊ฐ์ฒด๊ฐ 32bit int ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด 224bit
๋ฅผ ํ ๋นํด์ผ ํ๋ ๊ฒ์ ๋ณด์ฌ์ค๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ค๋ฒํค๋ ๋น์จ์ 7:1์ ์ด๋ฅธ๋ค. ๋, ๊ตฌ์ฑ ์
์๊ฐ ํ๋๋ฐ์ ์๋ intํ ๋ฐฐ์ด์ 288bit๋ฅผ ํ ๋นํด์ผ ํ๋๋ฐ, ์ญ์ ์ด ์ค๋ฒํค๋ ๋น์จ๋
9:1๋ก 32bit๋ณด๋ค ํจ์ฌ ํฌ๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ์ค์ ๋ก ์์ ์ 32bit์์ ์คํ๋๋ java
์ดํ๋ฆฌ์ผ์ด์
์ด 64bit์์ ์คํ๋๋ฉด ํจ์ฌ ๋ง์ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ ๊ฒ์ ๋ณผ ์
์๋ค. ์ผ๋ฐ์ ์ผ๋ก 64bit๋ก ์คํ๋ ๋ ์ฝ 70%๊ฐ๋ heap ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ๊ฐ
์ฃผ๋๋ค. ์ฆ, 32bit Java ๋ฐํ์์์ 1GB์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ Java ์ดํ๋ฆฌ์ผ์ด์
์ด๋ผ๋ฉด
64bit Java ๋ฐํ์์์๋ ์ผ๋ฐ์ ์ผ๋ก 1.7GB๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ ๋ง์ด๋ค. ๋ฌผ๋ก ์ด๋ฐ ๋ฉ๋ชจ๋ฆฌ
์ฌ์ฉ๋ ์ฆ๊ฐ๊ฐ Java ํ ๋ฉ๋ชจ๋ฆฌ์ ๊ตญํ๋ ๊ฒ์ ์๋๋ค. ์์์ ์ค๋ช
ํ๋ Native ํ ๋ฉ๋ชจ๋ฆฌ
์ ์ฌ์ฉ๋๋ ์ฆ๊ฐํ๊ฒ ๋๋๋ฐ, ์ฆ๊ฐ๋ ๋น์จ์ด 90%์ ์ด๋ฅผ ๋๋ ์๋ค.
์๋ ํ1์ ๋ณด๋ฉด 32bit์ 64bit๋ก ์คํ๋ ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ ํ๋๋ค์ ์ํด ํ ๋น๋๋ ๋ฉ
๋ชจ๋ฆฌ์ ์์ ์ ์ ์๋ค.
- 8. Field type Field size (bits)
Object Array
32-bit 64-bit 32-bit 64-bit
boolean 32 32 8 8
byte 32 32 8 8
char 32 32 16 16
short 32 32 16 16
int 32 32 32 32
float 32 32 32 32
long 64 64 64 64
double 64 64 64 64
Object fields 32 64 (32*) 32 64 (32*)
Object metadata 32 64 (32*) 32 64 (32*)
ํ 1. 32Bit ์ 64bit Java ๋ฐํ์ ๋ด์์ ํ๋๋ค์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ
*๊ฐ์ฒด ํ๋์ ๊ฐ์ฒด ๋ฉํ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ Compressed References ๊ธฐ์ ํน์ Compressed
OOPs ๊ธฐ์ ์ ํตํด 32bit๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ ์ ์๋ค.
Compressed References and Compressed Ordinary Object Pointers (OOPs)
IBM๊ณผ Oracle์ JVM๋ค์ ๋ชจ๋ Compressed References (-Xcompressedrefs) ๊ธฐ์ ๊ณผ
- 9. Compressed OOPs (-XX:+UseCompressedOops) ๊ธฐ์ ์ ์ ๊ณต 10 ํ๋๋ฐ, ์ด ๊ธฐ๋ฒ์ ์ด์ฉํ
๋ฉด ๊ฐ์ฒด๋ฅผ 64bit ๋ฐฉ์์ผ๋ก ์ ์ฅํ์ง ์๊ณ 32bit ๋ฐฉ์์ผ๋ก ์ ์ฅํ ์ ์๋ค. ์ด ๋ฐฉ๋ฒ์ ์ด
์ฉํ ๊ฒฝ์ฐ, ์์์ ๋งํ 70%์ ๋ฉ๋ชจ๋ฆฌ ์ถ๊ฐ์ฌ์ฉ์ ๋ง์ ์ ์๋ค. ํ์ง๋ง ์ด ์ต์
์
Native ํ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉ๋์๋ ์ํฅ์ ์ฃผ์ง ์๊ธฐ ๋๋ฌธ์, Native ํ์ ๋ํด์๋ ์ฌ์ ํ
64bit ํ๋ก์ธ์ค๊ฐ 32bit ํ๋ก์ธ์ค์ ๋นํด ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
10
์ฐธ์กฐ ์์ถ๊ณผ ๊ฐ์ฒด ์์ถ ๊ธฐ๋ฒ. ํ์ง๋ง ์ด ์ต์
์ ์ง์ ํ ๊ฒฝ์ฐ ์๊ธฐ์น ์๊ฒ JVM์ด ์ ์ง(crash)ํ
๋ ์ผ์ด ๋ฐ์ํ๊ธฐ๋ ํ๋ค.
- 10. Java ์ปฌ๋ ์
ํด๋์ค๋ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๋ฐฉ์
๋๋ถ๋ถ์ ์ดํ๋ฆฌ์ผ์ด์
๋ค์ด ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํด JavaSDK๊ฐ ์ ๊ณต
ํ๋ ํ์ค ์ปฌ๋ ์
(Collection) ํด๋์ค๋ฅผ ์ด์ฉํ๋ค. ๋ง์ฝ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ์ด ์ค์ํ ์ดํ๋ฆฌ์ผ
์ด์
์ ๋ง๋ค์ด์ผ ํ๋ค๋ฉด, ๊ฐ ์ปฌ๋ ์
๊ตฌํ์ฒด๋ค์ ์ธ๋ถ์ ์ธ ๊ธฐ๋ฅ์ ์ดํดํ๊ณ , ๊ฐ๊ฐ์ ๋ฉ๋ชจ
๋ฆฌ ์ค๋ฒํค๋๋ฅผ ์๊ณ ์์ด์ผ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก, ์ปฌ๋ ์
๊ตฌํ์ฒด์ ๊ธฐ๋ฅ์ด ๋ง์์๋ก ๋ฉ๋ชจ๋ฆฌ
์ค๋ฒํค๋๋ ์ฆ๊ฐํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก, ์ค์ ๋ก ํ์ํ์ง ์์๋ฐ๋ ๊ณผ๋ํ๊ฒ ๊ธฐ
๋ฅ์ด ๋ง์ ์ปฌ๋ ์
๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ทธ๋งํผ ์ธ๋ฐ์์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ๋ ๊ฒ์ด ๋
๋ค.
์์ฃผ ์ฌ์ฉ๋๋ ์ปฌ๋ ์
ํด๋์ค๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
- HashSet
- HashMap
- HashTable
- LinkedList
- ArrayList
HashSet๋ฅผ ์ ์ธํ๋ฉด, ์ด ๋ชฉ๋ก์ ๊ธฐ๋ฅ๊ณผ ์ค๋ฒํค๋๊ฐ ํฐ ์์๋ถํฐ ์ ์ ๊ฒ์ด๋ค. (HashSet
์ HashMap์ ๋ํผ ํด๋์ค๋ก, HashMap์ ๊ธฐ๋ฅ์ ๋ค์ ์ ํํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ฝ
๊ฐ ๋ ํฌ๋ค.)
Java Collections: HashSet
HashSet์ Set ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด์ด๋ค. JavaSE6 API ๋ฌธ์๋ฅผ ๋ณด๋ฉด HashSet์ด ๋ค์๊ณผ
๊ฐ์ด ์ค๋ช
๋์ด ์๋ค.
HashSet ๋ด์๋ ๋์ผํ ์์(element)๊ฐ ์กด์ฌํ์ง ์๋๋ค. ์ผ๋ฐํํด์ ๋งํ๋ฉด, ๊ฐ์ฒด
e1 ๊ณผ e2 ์ ๋ํด e1.equals(e2)๊ฐ true ์ธ e1 ๊ณผ e2 ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉฐ, null ์์๋
์ต๋ ํ ๊ฐ๋ง ์ ์ฅ๋๋ค. ์ด ํด๋์ค์ ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด, ์ด ์ธํฐํ์ด์ค๋
์ํ์์ ๋งํ๋ โ์งํฉโ์ ์ถ์ํํ ๊ฒ์ด๋ค.
HashSet์ HashMap์ ๋นํด ์ ํ์ ์ธ๋ฐ 11, ์์ ์ธ๊ธ๋์ด ์๋ฏ์ด ์ค๋ณต๋๋ ์์๊ฐ ํ๋
๋ ์๊ณ null ์์๋ ๋ง์์ผ ํ๋๋ง ์
๋ ฅ๋ ์ ์๋ค. ์ค์ ๊ตฌํ์ HashMap์ ๋ํผ ํด๋
์ค์ธ๋ฐ, ์์ ์๊ฒ ์
๋ ฅ๋ ๊ฐ์ HashMap์ ์ ์ฅํ๊ณ ์ด๋ฅผ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ด ๊ตฌํ๋์ด ์
๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์์๋ค์ ์ค๋ณต์ ์ ํํ๋ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ ๋๋ฌธ์ HashSet์ด
11
๊ธฐ๋ฅ์ด ์ ํ์ ์ด๋ผ๋ ๋ง๋ก ์คํดํ ์๋ ์์ง๋ง, ์ ์ฅ๋ ์ ์๋ ๋ฐ์ดํฐ์ ์กฐ๊ฑด์ด ์ ํ์ ์ด๋ผ๊ณ
์ดํดํ๋ ๊ฒ์ด ๋ ์ณ์ ๋ฏ ํ๋ค. ๊ทธ๋์ ์ค์ ๋ก ๊ธฐ๋ฅ์ ์ผ๋ก๋ง ๋ณธ๋ค๋ฉด โ๋ฐ์ดํฐ๋ฅผ ์ ํํ๋ ๊ธฐ๋ฅโ์ด
์ถ๊ฐ๋์ด ์๋ค๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ์ด๋ค.
- 11. HashMap์ ๋นํด ์ฝ๊ฐ ๋ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๊ฐ ํฌ๊ฒ ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆผ 6์ 32bit Java ๋ฐํ์์์ HashSet์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๋ฐฉ์์ ๋ณด์ฌ์ฃผ๊ณ ์๋ค.
๊ทธ๋ฆผ 6. 32bit Java ํ๋ก์ธ์ค์์์ HashSet ๊ฐ์ฒด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น ์
๊ทธ๋ฆผ 6์ java.util.HashSet ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์์ ๋, ์ค์ HashSet๊ฐ์ฒด๊ฐ ์ฌ์ฉํ
๋ ๋ฉ๋ชจ๋ฆฌ(Shallow ํ)์ HashSet ๋ด์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ์ ๋์ ๋ฉ๋ชจ๋ฆฌ(Retained ํ) ์ฌ
์ฉ๋์ ๋ณด์ฌ์ค๋ค. HashSet์ ๋ํด Shallow ํ ๋ฉ๋ชจ๋ฆฌ๋ 16byte์ด๊ณ Retained ํ ๋ฉ๋ชจ๋ฆฌ
๊ฐ 144byte์ธ ๊ฒ์ ์ ์ ์๋ค. HashSet ๊ฐ์ฒด๊ฐ ์ฒ์ ์์ฑ๋๋ฉด, ์ต์ด ํ ๋น๋๋ ๊ธฐ๋ณธ ์ฉ
๋์ 16์ด๋ฉฐ, ์ด ๋ง์ HashSet์ด ์ต์ด ์์ฑ๋์์ ๋, 16๊ฐ์ ์์๋ฅผ ๋ด์ ์ ์๋๋ก ๋
์ด ์๊ณ ์์ง์ ์๋ฌด ์์๋ ์
๋ ฅ๋์ง ์์์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก 144byte๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ด
๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ํฌ๊ธฐ๋ HashMap์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋(128byte)๋ณด๋ค 16byte๊ฐ ํฐ ์์ด๋ค. ํ2
์ HashSet์ ์์ธํ ์์ฑ์ ์ ์ด๋์๋ค.
๊ธฐ๋ณธ ์ฉ๋ 16 ๊ฐ
ํ
๋น์์ ๋์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ 144 bytes
์ค๋ฒํค๋ HashMap ์ค๋ฒํค๋ + 16byte
1 ๋ง๊ฐ์ ์์์ ๋ํ ์ค๋ฒํค๋ HashMap ์ค๋ฒํค๋ + 16byte
๊ฒ์/์ถ๊ฐ/์ญ์ ์ฑ๋ฅ O(1)12 โ ํด์ ์ถฉ๋13์ด ์๋ค๋ฉด ์์์ ์๊ฐ ์์
์๋์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค
ํ 2. HashSet ๊ฐ์ฒด์ ํน์ง
12
์ด์ ๊ฐ์ ํ๊ธฐ๋ฒ์ Big O notation, ๋น
์ค ํ๊ธฐ๋ฒ์ด๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ, ํน์ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ์
ํ์ ์ผ๋ก ํ๊ธฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ๋ํ์ ์ธ ์๋ก, O(1), O(n), O(nc), O(2n), O(logn) ๋ฑ์ด ์๋ค. n์
์์์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ฉฐ, ์ฌ๊ธฐ์ ๋งํ O(1)์, ์ฑ๋ฅ์ด ์์์ ๊ฐ์์ ์ํฅ์ ๋ฐ์ง ์๋ ๊ฒ์ ์๋ฏธ
ํ๋ค. Big O notation์ ๋ํด์๋ http://en.wikipedia.org/wiki/O_notation๋ฅผ ์ฐธ์กฐํ๋ผ.
13
Hash Collision. Hash ํค ๋ฐฉ์์ ์ด์ฉํ ๊ฒฝ์ฐ ํด์ ์ถฉ๋์ด ์ผ์ด๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค. ์
๋ ฅ ๊ฐ์ ๊ฐ
์๋ฅผ ๋ฏธ๋ฆฌ ์๊ณ ์๊ณ , ๊ทธ ๊ฐ์๊ฐ ์ ์ ๊ฒฝ์ฐ์๋ ํด์น ์ถฉ๋์ ํผํ๋๋ก ํ ์ ์์ง๋ง, ๊ทธ๋ ์ง ์์
๊ฒฝ์ฐ์๋ ์ธ์ ๋ ํด์ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค. ์์ธํ ๋ด์ฉ์
http://en.wikipedia.org/wiki/Hash_function๋ฅผ ์ฐธ์กฐํ๋ผ.
- 12. Java Collections: HashMap
HashMap์ Map ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด์ด๋ค. HashMap์ JavaSE6 API ๋ฌธ์์ ๋ค์๊ณผ ๊ฐ
์ด ์ค๋ช
๋์ด ์๋ค.
HashMap ์ ํค(key)์ ๊ฐ(value)๋ฅผ ์ฐ๊ฒฐํ ๊ฐ์ฒด์ด๋ค. ์ด ๊ฐ์ฒด์๋ ํ๋ ์ด์์
๋์ผํ ํค๊ฐ ์ ์ฅ๋ ์ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ํค๋ ๋ง์์ผ ๋จ ํ๋์ ๊ฐ 14 ์ ๊ฐ๋ฆฌํฌ ์
์๋ค.
HashMap์ ์ด์ฉํ๋ฉด ํค/๊ฐ์ ์์ผ๋ก ์ ์ฅํ ์ ์๋๋ฐ, ํค๋ฅผ ํด์ฑ(hashing)ํ์ฌ ํน์
์ธ๋ฑ์ค๋ก ๋ง๋ ๋ค ๊ทธ ๊ฐ์ ์ด์ฉํ์ฌ ํค์ ๊ฐ์ ์ ์ฅํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ ์ฅ๋ ํค๋ฅผ ๊ณ ์
์ผ๋ก ๊ฒ์ํ ์ ์๋ค. Null ํน์ ์ค๋ณต๊ฐ ์
๋ ฅ๋ ํ์ฉ๋๋๋ฐ, ์ด๋ฐ ์ ์์ ๋ณผ ๋,
HashMap์ HashSet์ ๋จ์ํ ๋ฒ์ ์ด๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
HashMap์ HashMap$Entry ๊ฐ์ฒด์ ๋ฐฐ์ด์ ๊ตฌํํด ๋์ ๊ฒ์ด๋ค. ๊ทธ๋ฆผ 7์์ 32bit Java
๋ฐํ์์์ HashMap ๊ฐ์ฒด๊ฐ ์์ฑ๋์์ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๋ฐฉ์์ ๋ณผ ์ ์๋ค.
๊ทธ๋ฆผ 7. 32bit Java ํ๋ก์ธ์ค์์์ HashMap ๊ฐ์ฒด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น ์
๊ทธ๋ฆผ 7์ ๋ณด๋ฉด, HashMap ๊ฐ์ฒด๊ฐ ์ต์ด ์์ฑ๋๋ฉด HashMap ๊ฐ์ฒด์ ๋๋ถ์ด
HashMap$Entry ๊ฐ์ฒด ๋ฐฐ์ด์ด ์์ฑ๋๊ณ ๋ฐฐ์ด์ ๊ธฐ๋ณธ ํฌ๊ธฐ๊ฐ 16๊ฐ์์ ์ ์ ์๋ค. ๊ทธ๋ฆฌ
๊ณ ํ
๋น HashMap ๊ฐ์ฒด๊ฐ 128byte์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ๋ ๊ฒ์ ์ ์ ์๋ค. ํค/๊ฐ ์์ด
์
๋ ฅ๋๋ฉด HashMap$Entry ๊ฐ์ฒด์ ์ํด ์บก์ํ๋์ด ์ ์ฅ๋๋๋ฐ, ์ด ๊ฐ์ฒด์๋ ์ผ์ ํ ์
์ค์ ์ค๋ฒํค๋๊ฐ ์กด์ฌํ๋ค.
HashMap$Entry ๊ฐ์ฒด๊ฐ ํฌํจํ๊ณ ์๋ ํ๋๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
๏ท int KeyHash
๏ท Object next
๏ท Object key
๏ท Object value
32bit ํ๋ก์ธ์ค 15 ์์ HashMap$Entry ๊ฐ์ฒด๋ ์ปฌ๋ ์
์์ ์
๋ ฅ๋ ํค/๊ฐ ์์ ๊ด๋ฆฌํ๋ค.
14
ํน์ ๊ฐ ํน์ null
- 13. ์ฆ, HashMap ๊ฐ์ฒด์ ์ค๋ฒํค๋๋ HashMap ์์ฒด์ ์ค๋ฒํค๋์ ๊ฐ๊ฐ์ HashMap$Entry
๊ฐ์ฒด์ ์ค๋ฒํค๋๋ฅผ ๋ํ ๊ฐ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๊ทธ๋์ ์ด๋ฐ ์์ด ๋ง๋ค์ด ์ง ์ ์๋ค.
HashMap object
+ Array object overhead
+ (number of entries * (HashMap$Entry array entry + HashMap$Entry object))
1๋ง ๊ฐ์ ์์๊ฐ ์
๋ ฅ๋์ด ์๋ HashMap์ ์๊ฐํด๋ณด๋ฉด, ์ค๋ฒํค๋๋ง ์ฝ 360KB์ ์ด๋ฅธ๋ค.
๋น์ฐํ ์ด ๊ฐ์ ํค์ ๊ฐ์ ์ํ ๋ฉ๋ชจ๋ฆฌ ์๋น๋์ ํฌํจํ์ง ์์ ๊ฐ์ด๋ค.
ํ3์์ HashMap์ ๋ํ ์์ธํ ๋ด์ฉ์ด ์ค๋ช
๋์ด ์๋ค.
๊ธฐ๋ณธ ์ฉ๋ 16 ๊ฐ
ํ
๋น์์ ๋์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ 128 bytes
์ค๋ฒํค๋ 64 bytes + ์
๋ ฅ ์์๋ง๋ค 36 bytes ์ฉ ์ฆ๊ฐ
1 ๋ง๊ฐ์ ์์์ ๋ํ ์ค๋ฒํค๋ ~360K
๊ฒ์/์ถ๊ฐ/์ญ์ ์ฑ๋ฅ O(1) โ ํด์ ์ถฉ๋์ด ์๋ค๋ฉด ์์์ ์๊ฐ ์์
์๋์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
ํ 3. HashMap ๊ฐ์ฒด์ ํน์ง
Java Collections: Hashtable
Hashtable์ HashMap๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Map์ธํฐํ์ด์ค ๊ตฌํ์ฒด์ด๋ค. JavaSE6 API ๋ฌธ์์์
์ค๋ช
๋ Hashtable์ ๋ค์๊ณผ ๊ฐ๋ค.
Hashtable ์ ํค์ ๊ฐ์ ์ฐ๊ฒฐํด์ฃผ๋ ๊ตฌํ์ฒด์ด๋ค. Null ์ด ์๋ ๋ชจ๋ ๊ฐ์ฒด๋ ํค๋
๊ฐ์ผ๋ก ์ฌ์ฉ๋ ์ ์๋ค.
Hashtable์ HashMap๊ณผ ์๋นํ ์ ์ฌํ์ง๋ง, ๋ ๊ฐ์ง ์ ํ์ฌํญ์ด ์กด์ฌํ๋ค. ํค/๊ฐ ๋ชจ๋
์ null ๊ฐ์ ์
๋ ฅํ ์ ์๋ค๋ ๊ฒ๊ณผ, Hashtable์ด ๋๊ธฐํ๋ ํด๋์ค 16
๋ผ๋ ๊ฒ์ด๋ค.
15
์๋ฌธ์๋ 32bit HashMap$Entry object๋ผ๊ณ ํ๊ธฐ๋์ด ์์ด ๊ทธ๋๋ก ์ ๊ธด ํ์ง๋ง, ๊ตณ์ด 32bit๋ผ๋
๋ง์ด ๋ค์ด๊ฐ ํ์๋ ์์ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. 32bit ํ๋ก์ธ์ค์์ ์ค๋ฒํค๋์ ํฌ๊ธฐ๊ฐ 36byte๋ผ๋ ๊ฒ์
๋ํ๋ด๊ธฐ ์ํด ๊ตณ์ด 32bit๋ผ๋ ๋ง์ ์ด ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
16
๋ค๋ฅธ ๋ง๋ก ์ด ํด๋์ค์ ๊ฐ์ฒด๊ฐ Thread-Safeํ๋ค๊ณ ๋งํ ์ ์๋ค. Thread-Safe ๊ฐ์ฒด๋ผ๋ ๊ฐ๋
์
๊ธฐ๋ณธ์ ์ผ๋ก๋ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์ ์์ ์ผ๋ก ๊ฐ๋ฐ์๊ฐ ์๋ํ ๋๋ก ๋์ํ๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ์ง
๋ง ์ด ๋ง ๋ง์ผ๋ก๋ Thread-Safe์ ๋ชจ๋ ์์ธ ๋ด์ฉ์ ์ค๋ช
ํ๊ธฐ ์ด๋ ต๋ค. Thread-Safe์ ๋ํ ์์ธํ
๋ด์ฉ์ ์๊ณ ์ถ๋ค๋ฉด Addison Wesley ์์ ์ถํํ [Java Concurrency in Practice]๋ฅผ ์ฐธ๊ณ ํ๊ธฐ ๋ฐ๋
- 14. HashMap์ ๋ฐ๋๋ก null ํค/๊ฐ์ ์
๋ ฅํ ์ ์์ผ๋ฉฐ ๋๊ธฐํ๋์ด ์์ง๋ ์๋ค. ๋ง์ฝ ๋๊ธฐ
ํ๋ HashMap์ ๋ง๋ค๊ณ ์ถ์ผ๋ฉด Collections.synchronizezdMap() ๋ฉ์๋๋ฅผ ์ด์ฉํด์ผ ํ
๋ค.
Hashtable๋ HashMap๊ณผ ๋์ผํ๊ฒ Hashtable$Entry๋ผ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ ๊ด๋ฆฌํ๋๋ก ๊ตฌ
ํ๋์ด ์๋ค. ๊ทธ๋ฆผ8์์ 32bit Java ๋ฐํ์์์์ Hashtable์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๋ฐฉ์์ ํ์ธ
ํ ์ ์๋ค.
๊ทธ๋ฆผ 8. 32bit Java ํ๋ก์ธ์ค์์์ Hashtable ๊ฐ์ฒด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น ์
๊ทธ๋ฆผ8์์ ๋ณผ ์ ์๋ฏ์ด, Hashtable์ด ์ต์ด ์์ฑ๋๋ฉด ์์ํ๊ฒ Hashtable ๊ฐ์ฒด๋ฅผ ์ํด
์ 40byte๊ฐ ํ ๋น๋๋ ๊ฒ์ ์ ์ ์๋ค. ๋๋จธ์ง 64byte๋ Hashtable$Entry ๊ฐ์ฒด ๋ฐฐ์ด์
์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋๋ฐ, HashMap๊ณผ๋ ๋ค๋ฅด๊ฒ ๊ธฐ๋ณธ ์ฉ๋์ 11์ธ ๊ฒ์ ์ ์ ์๋ค. ์ด์จ
๋ ์ต์ด ์์ฑํ Hashtable์ ์ํ ์ด๊ธฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํฌ๊ธฐ๋ 104byte๊ฐ ๋๋ค.
Hashtable$Entry ํด๋์ค๋ HashMap$Entry ํด๋์ค์ ๋์ผํ ํํ์ด๋ค.
๏ท int KeyHash
๏ท Object next
๏ท Object key
๏ท Object value
์ด ์๊ธฐ๋ Hashtable$Entry ๊ฐ์ฒด ํ๋๋ง๋ค 32byte์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ ์๋ฏธ
ํ๊ณ , 1๋ง ๊ฐ์ ํค/๊ฐ์ด ์
๋ ฅ๋๋ฉด HashMap๊ณผ ๊ฐ์ด ์ฝ 360KB์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ฒ ๋
๋ค.
ํ 4 ์์ Hashtable ์ ์์ธํ ์์ฑ์ ํ์ธํ ์ ์๋ค.
๊ธฐ๋ณธ ์ฉ๋ 11 entries
ํ
๋น์์ ๋์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ 104 bytes
์ค๋ฒํค๋ 56 bytes + ์์๋ง๋ค 36 bytes ์ถ๊ฐ
๋ค.
- 15. 1 ๋ง๊ฐ์ ์์์ ๋ํ ์ค๋ฒํค๋ ~360K
๊ฒ์/์ถ๊ฐ/์ญ์ ์ฑ๋ฅ O(1) โ ํด์ ์ถฉ๋์ด ์๋ค๋ฉด ์์์ ์๊ฐ ์์
์๋์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค
ํ 4. Hashtable ๊ฐ์ฒด์ ํน์ง
์ด๋ฏธ ๋์น์ฑ๊ฒ ์ง๋ง, Hashtable์ ๊ธฐ๋ณธ ์ฉ๋์ HashMap์ ๊ธฐ๋ณธ ์ฉ๋๋ณด๋ค ์ฝ๊ฐ ์๋ค.(11
๊ฐ vs 16๊ฐ) ๊ทธ๊ฒ ๋ง๊ณ ๋ null์ ๋ํ ์
๋ ฅ ๋ถ๊ฐ๋ ๋๊ธฐํ์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ธ ์ฐจ์ด์ ๋ฐ์
์๋๋ฐ, ์ด๋ฐ ๋ถ๋ถ๋ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด๋ ์ปฌ๋ ์
์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐ์๋ ๊ผญ ํ์
ํ ๊ฒ์ ์๋ ์ ์๋ค.17
Java Collections: LinkedList
LinkedList๋ List ์ธํฐํ์ด์ค์ ๋ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ํํ์ ๊ตฌํ์ฒด์ด๋ค. 18 JavaSE6 API ๋ฌธ
์์์ ๋งํ๋ LinkedList๋ ๋ค์๊ณผ ๊ฐ๋ค.
LinkedList๋ ์์๊ฐ ์ ํด์ ธ ์๋ ์ปฌ๋ ์
ํด๋์ค์ด๋ค. (์ํ์ค๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.) ์ด ์ธํฐํ
์ด์ค๋ฅผ ์ด์ฉํ ๊ฒฝ์ฐ, ๋ฆฌ์คํธ ๋ด์ ํ๋ ํ๋์ ์์๋ค์ด ์
๋ ฅ๋๋ ์์น์ ๋ํ ์ธ๋ฐํ
์ ์ด๊ฐ ๊ฐ๋ฅํด์ง๋ค. ์ ํด์ง ์ ์ํ์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ฌ ๋ฆฌ์คํธ ๋ด์ ํน์ ์์์ ์ ๊ทผ
ํ๊ฑฐ๋ ๊ฒ์ํ ์ ์๋ค. Set ์ธํฐํ์ด์ค์๋ ๋ฌ๋ฆฌ ๋์ผํ ์์๊ฐ ์
๋ ฅ๋ ์ ์๋ค.
LinkedList๋ LinkedList$Entry ๊ฐ์ฒด ๋ชฉ๋ก์ ๊ตฌํํ ๊ฒ์ด๋ค. ๊ทธ๋ฆผ 9๋ฅผ ๋ณด๋ฉด 32bit Java ๋ฐ
ํ์์์ LinkedList๋ฅผ ์ฌ์ฉํ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๋ฐฉ์์ ์ ์ ์๋ค.
๊ทธ๋ฆผ 9. 32bit Java ํ๋ก์ธ์ค์์์ LinkedList ๊ฐ์ฒด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น ์
17
Hashtable์ ๋๊ธฐํ ์ฒ๋ฆฌ๊ฐ ํ์ํ์ง ์์ ์ํฉ์์๋ ๋๊ธฐํ ์ฒ๋ฆฌ๊ฐ ์ํ๋๋๋ก ๊ตฌํ๋์ด ์
๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ถ๋ถ์์ HashMap์ ๋นํด ์ฑ๋ฅ์ด ๋จ์ด์ง โ์โ๋ ์๋ค. ๋ง์ฝ ๋๊ธฐํ๋ Map ๊ตฌํ์ฒด
๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด Hashtable์ด๋ Collections.synchronizezdMap()์ ์ด์ฉํ๊ธฐ ๋ณด๋ค๋, JavaSE5
๋ถํฐ ์ง์๋๋ ConcurrentHashMap์ ์ด์ฉํ๊ธฐ๋ฅผ ๊ถ์ฅํ๋ค.
18
์ ๋ง ๋์ด๋ฐ๋ณต์ ์ธ ์ค๋ช
์ด๋ค.
- 16. ๊ทธ๋ฆผ9์์ ๋ณผ ์ ์๋ฏ์ด, LinkedList๊ฐ ์ต์ด ์์ฑ๋๋ฉด LinkedList๊ฐ์ฒด ์์ฒด๋ฅผ ์ํด
24byte, ๊ทธ๋ฆฌ๊ณ ํ๋์ LinkedList$Entry ๊ฐ์ฒด๋ฅผ ์ํด ๋ค์ 24byte๋ฅผ, ๊ทธ๋์ ์ด 48byte
์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๋ค. LinkedList ํด๋์ค์ ์ฅ์ ๋ค ์ค ํ๋๋, ํญ์ ๋ฆฌ์คํธ์ ํฌ๊ธฐ๊ฐ ์
ํํ๊ณ , ํฌ๊ธฐ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ํ์๊ฐ ์๋ค๋ ๊ฒ์ด๋ค. LinkedList์ ๊ธฐ๋ณธ ์ฉ๋์ 1์ธ๋ฐ, ์
๋ก์ด ์์๊ฐ ์ถ๊ฐ๋๊ฑฐ๋ ๊ธฐ์กด์ ์์๊ฐ ์ ๊ฑฐ๋ ๋๋ง๋ค ์ฆ๊ฐ์ ์ผ๋ก ์ด ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค. ๊ทธ
๋ ๋ค๊ณ ํ๋๋ผ๋ LinkedList$Entry ๊ฐ์ฒด์๋ ์ค๋ฒํค๋๊ฐ ์๋๋ฐ, ์ด ํด๋์ค ๋ด์ ํฌํจ๋
์ด ์๋ ํ๋๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
๏ท Object previous
๏ท Object next
๏ท Object value
๋ฌผ๋ก ์ด ํฌ๊ธฐ๋ HashMap์ด๋ Hashtable์ ์ค๋ฒํค๋์ ๋นํ๋ฉด ์๋ค๊ณ ํ ์ ์๋๋ฐ, ๊ทธ
์ด์ ๋ LinkedList๊ฐ ๋จ ํ๋์ ์์๋ง ํฌํจํ๊ณ ์๊ณ ํค/๊ฐ ์์ ์ ์ฅํ ํ์๋ ์๊ณ ,
์ถํ ๊ฒ์์ ์ํด ํค๋ฅผ ํด์ฑํ์ฌ ์ ์ฅํ ํ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ฉด ๋ถ์ ์ ์ธ ์ธก๋ฉด๋
์๋๋ฐ, LinkedList๋ด์์ ๊ฒ์์ ์ํํ๋ ๊ฒ์ ํจ์ฌ ๋๋ฆฐ๋ฐ, ํน์ ์์๋ฅผ ์ฐพ๊ธฐ ์ํด ์
๋ ฅ๋ ์์๋ค์ ์์ฐจ์ ์ผ๋ก ์ ๊ฒํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. LinkedList์ ์
๋ ฅ๋์ด ์๋ ์์์
์๊ฐ ๋ง๋ค๋ฉด, ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ๋ฐ ์ค๋ ์๊ฐ์ด ์์๋ ๊ฒ์ด๋ค.
ํ5๋ LinkedList์ ์์ฑ์ ๋ณด์ฌ์ฃผ๊ณ ์๋ค.
๊ธฐ๋ณธ ์ฉ๋ 1 ๊ฐ
ํ
๋น์์ ๋์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ 48 bytes
์ค๋ฒํค๋ 24 bytes + ์์๋น 24 bytes ์ถ๊ฐ
1 ๋ง ๊ฐ์ ์์์ ๋ํ ์ค๋ฒํค๋ ~240K
๊ฒ์/์ถ๊ฐ/์ญ์ ์ฑ๋ฅ O(n) โ ์
๋ ฅ๋ ์์์ ์์ ์ ๋น๋กํ์ฌ ์๋๊ฐ ์ ํ๋จ
ํ 5. LinkedList ๊ฐ์ฒด์ ํน์ง
Java Collections: ArrayList
ArrayList๋ List ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ก, ํฌ๊ธฐ๊ฐ ๋ณํ ์ ์๋ ๋ฐฐ์ด์ด๋ค. JavaSE6 API ๋ฌธ
์์์ ์ธ๊ธํ๋ ArrayList์ ๋ํ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
ArrayList ๋ ์์๊ฐ ์ ํด์ ธ ์๋ ์ปฌ๋ ์
ํด๋์ค์ด๋ค.(์ํ์ค๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.) ์ด
์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ ๊ฒฝ์ฐ, ๋ฆฌ์คํธ ๋ด์ ํ๋ ํ๋์ ์์๋ค์ด ์
๋ ฅ๋๋ ์์น์
๋ํ ์ธ๋ฐํ ์ ์ด๊ฐ ๊ฐ๋ฅํด์ง๋ค. ์ ํด์ง ์ ์ํ์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ฌ ๋ฆฌ์คํธ ๋ด์
- 17. ํน์ ์์์ ์ ๊ทผํ๊ฑฐ๋ ๊ฒ์ํ ์ ์๋ค. Set ์ธํฐํ์ด์ค์๋ ๋ฌ๋ฆฌ ๋์ผํ ์์๊ฐ
์
๋ ฅ๋ ์ ์๋ค.
LinkedList์์ ์ฐจ์ด์ ์ ArrayList๋ LinkedList$Entry ํด๋์ค ๋์ Object์ ๋ฐฐ์ด์ ์ฌ
์ฉํ๋ค๋ ์ ์ด๋ค. ๊ทธ๋ฆผ 10์ ๋ณด๋ฉด 32bit Java ๋ฐํ์์์ ArrayList๊ฐ ์ต์ด ์์ฑ๋์์ ๋
ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ธํ ์ ์๋ค.
๊ทธ๋ฆผ 10. 32bit Java ํ๋ก์ธ์ค์์์ ArrayList ๊ฐ์ฒด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น ์
๊ทธ๋ฆผ 10์ ๋ณด๋ฉด ArrayList๊ฐ ์์ฑ๋์์ ๋, ArrayList ๊ฐ์ฒด๋ฅผ ์ํด 32byte, ๊ทธ๋ฆฌ๊ณ ํฌ๊ธฐ
๊ฐ 10์ธ Object ๊ฐ์ฒด ๋ฐฐ์ด์ ์ํด 56byte๊ฐ ํ ๋น๋์ด ์ด 88byte๊ฐ ํ ๋น๋๋ ๊ฒ์ ํ์ธ
ํ ์ ์๋ค.
ํ6์์ ArrayList์ ์์ฑ์ ํ์ธํ ์ ์๋ค.
๊ธฐ๋ณธ ์ฉ๋ 10
ํ
๋น์์ ๋์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ 88 bytes
์ค๋ฒํค๋ 48 bytes + ์๋ก์ด ์์ ๋ง๋ค 4 bytes ์ถ๊ฐ
1 ๋ง ๊ฐ์ ์์์ ๋ํ ์ค๋ฒํค๋ ~40K
๊ฒ์/์ถ๊ฐ/์ญ์ ์ฑ๋ฅ O(n) โ ์
๋ ฅ๋ ์์์ ์์ ์ ๋น๋กํ์ฌ ์๋๊ฐ ์ ํ๋จ
ํ 6. ArrayList ๊ฐ์ฒด์ ํน์ง
๋ค๋ฅธ ์ข
๋ฅ์ "collections"
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ปฌ๋ ์
ํด๋์ค๋ค๋ฟ๋ง ์๋๋ผ, StringBuffer ํด๋์ค๋ ์ผ์ข
์ ์ปฌ๋ ์
์ผ๋ก ์ฌ๊ฒจ์ง ์ ์๋๋ฐ, ์ด๋ StringBuffer๊ฐ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๊ณ ๊ด๋ฆฌํ๊ณ ์๊ณ
๊ทธ ๋ฐฉ์์ด ์ฌํ ์ปฌ๋ ์
ํด๋์ค์ ๋น์ทํ๊ธฐ ๋๋ฌธ์ด๋ค. JavaSE6 API ๋ฌธ์์๋ StringBuffer
ํด๋์ค์ ๋ํด ๋ค์๊ณผ ๊ฐ์ด ๊ธฐ์ ๋์ด ์๋ค.
Thread-Safe ํ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฌธ์์ด์ด๋ค. <์ค๋ต> ๋ชจ๋ StringBuffer ํด๋์ค๋ ์ ์ฅ
์ฉ๋์ด ์๋๋ฐ, StringBuffer ๊ฐ์ฒด ๋ด์ ํฌํจ๋์ด ์๋ ๋ฌธ์์ด์ด ์ ์ฅ ์ฉ๋๋ณด๋ค ํฌ์ง
- 18. ์์ ๋์๋ ์๋ก์ด ๋ด๋ถ ๋ฒํผ ๋ฐฐ์ด์ ํ ๋นํ ํ์๊ฐ ์๋ค. ๊ทธ ํฌ๊ธฐ๋ณด๋ค ์ปค์ง๋ฉด
๋ด๋ถ ๋ฒํผ๊ฐ ์๋์ ์ผ๋ก ์ฆ๊ฐ๋๋ค.
StringBuffer ํด๋์ค๋ char ๋ฐ์ดํฐ์ ๋ฐฐ์ด์ ๊ด๋ฆฌํ๋๋ก ๊ตฌํ๋์ด ์๋ค. ๊ทธ๋ฆผ11๋ฅผ ํตํด
32bit Java ๋ฐํ์ ์์์ StringBuffer๋ฅผ ์ํด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ํ ๋น๋๋์ง ํ์ธํ ์
์๋ค.
๊ทธ๋ฆผ 10. 32bit Java ํ๋ก์ธ์ค์์์ StringBuffer ๊ฐ์ฒด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น ์
๊ทธ๋ฆผ11์์ ๋ณผ ์ ์๋ฏ์ด, StringBuffer ๊ฐ์ฒด๊ฐ ์ต์ด ์์ฑ๋๋ฉด, StringBuffer๋ฅผ ์ํด
24byte๋ฅผ, ๊ทธ๋ฆฌ๊ณ ํฌ๊ธฐ๊ฐ 16์ธ char ๋ฐฐ์ด์ ์ํด 48byte๊ฐ ํ ๋น๋์ด, ์ด 72byte๊ฐ ํ ๋น
๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ค๋ฅธ ์ปฌ๋ ์
ํด๋์ค๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, StringBuffer๋ ๊ธฐ๋ณธ ์ฉ๋๊ณผ ๊ทธ ์ฉ๋์ด ์ฌ์กฐ์ ๋๋
๋ฉ์ปค๋์ฆ์ ๊ฐ๊ณ ์๋ค. ํ7์์ StringBuffer์ ์์ฑ์ ํ์ธํ ์ ์๋ค.
๊ธฐ๋ณธ ์ฉ๋ 16
ํ
๋น์์ ๋์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ 72 bytes
์ค๋ฒํค๋ 24 bytes
1 ๋ง ๊ฐ์ ์์์ ๋ํ ์ค๋ฒํค๋ 24 bytes
๊ฒ์/์ถ๊ฐ/์ญ์ ์ฑ๋ฅ NA
ํ 7. StringBuffer ๊ฐ์ฒด์ ํน์ง
- 19. ์ปฌ๋ ์
๋ด์ ๋น ๊ณต๊ฐ๋ค
์ง๊ธ๊น์ง ๋ด ์๋, ์ฌ๋ฌ ๊ฐ์ง ์ปฌ๋ ์
๋ค์ ์ค๋ฒํค๋๋ค์ด ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋์ ๋ํ ๋ชจ๋
๋ด์ฉ์ ์๋๋ค. ์ง๊ธ๊น์ง์ ์์์ ๊ฐ ์ปฌ๋ ์
์ ํฌ๊ธฐ๊ฐ ์ ํํ๊ฒ ์ธก์ ๋ ์ ์๋ ๊ฒ์ฒ
๋ผ ์ค๋ช
ํ์๋๋ฐ, ์ฌ์ค ๋์ฒด๋ก ๊ทธ๋ ์ง ์๋ค. ๋๋ถ๋ถ์ ์ปฌ๋ ์
๋ค์ ์ด๊ธฐ ์ ์ฅ์ฉ๋์ ๋ฐํ
์ผ๋ก ์์ฑ๋๊ณ , ๋ฐ์ดํฐ๋ค์ด ์์ฑ๋ ์ปฌ๋ ์
์์ ์
๋ ฅ๋๋ค. ๊ทธ๋ ๋ค๋ ๋ง์, ์ด๊ธฐ ์ ์ฅ์ฉ๋
์ด ์ค์ ๋ก ์
๋ ฅ๋๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ณด๋ค ๋ ํฌ๋ค๋ฉด ๊ทธ ์ฐจ์ด๋งํผ ์ค๋ฒํค๋๊ฐ ์๊ธด๋ค๋ ์
๋ฏธ๊ฐ ๋๋ค.
StringBuffer์ ์๋ฅผ ์ด์ฉํ์ฌ ์๊ฐํด ๋ณด์. StringBuffer์ ๊ธฐ๋ณธ ์ฉ๋์ 16๊ฐ์ char๋ฅผ
์ ์ฅํ ์ ์๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ก ์๊ธฐํ๋ฉด ๊ทธ ํฌ๊ธฐ๋ 72byte์ด๋ค.19 StringBuffer๊ฐ ์ฒ์ ์์ฑ๋
์์ ๋์๋, ์๋ฌด๋ฐ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํ์ง ์์์ผ๋, 72byte์ ์ด๋ค ๋ฐ์ดํฐ๋ ์ ์ฅ๋์ด ์
์ง ์๋ ๊ฒ์ด๋ค. ์ด ์ํ์์, ์๋ฅผ ๋ค์ด โMY STRINGโ์ด๋ผ๋ ๋ฌธ์์ด์ ์
๋ ฅํ๋ค๋ฉด, ํฌ๊ธฐ
16์ char ๋ฐฐ์ด์ 9๊ฐ์ ๋ฌธ์๋ฅผ ์
๋ ฅํ๋ ๊ฒ์ด ๋๋ค. ๊ทธ๋ฆผ12์์ 32bit Java ๋ฐํ์์์
์คํ๋๋ค๊ณ ๊ฐ์ ํ์ ๋ ์ง๊ธ๊น์ง์ ๋ฉ๋ชจ๋ฆฌ ์ํฉ์ ํ์ธํ ์ ์๋ค.
๊ทธ๋ฆผ 12. 32bit ํ๋ก์ธ์ค ๋ด์์ โMY STRINGโ์ด๋ผ๋ ๋ฌธ์์ด์ด ์
๋ ฅ๋ StringBuffer ๊ฐ์ฒด์
๋ฉ๋ชจ๋ฆฌ ์ํฉ
๊ทธ๋ฆผ12์์ ๋ณผ ์ ์๋ฏ, ์ฌ์ ํ 7๊ฐ์ char ๋ฐฐ์ด์ด ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋์ด ์์ง๋ง ๋น ์ํ๋ก
๋จ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ๋ํ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๋ 14byte๊ฐ ๋๋ค. 20 ์ ์ฅ์ฉ๋ 16
์ ๋ํด 9๊ฐ์ ๋ฐ์ดํฐ๋ง ์
๋ ฅ๋์์ผ๋ ๋ฐ์ดํฐ ์
๋ ฅ๋น์จ(fill ratio)์ 0.56 21 ์ด๋ค. ์ปฌ๋ ์
์
19
ํ7์ ๋ค์ ํ ๋ฒ ํ์ธํ๋ผ.
20
์๋ฌธ์๋ 112byte์ ์ค๋ฒํค๋๋ผ๊ณ ๋์์๋ค. (- in this case an additional overhead of 112 bytes)
2byte ๋ฐ์ดํฐ์ธ char 7๊ฐ๊ฐ ๋ญ๋น๋๊ณ ์์ผ๋ฉด 14byte์ ์ค๋ฒํค๋์ด๋ ์๋ชป๋ ์ ๋ณด์ด๋ค. ์ญ์๊ฐ ์
๊ฐํ๊ธฐ๋ก๋ 112bit๋ฅผ 112byte๋ก ์๋ชป ์ ์ ๊ฒ์ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. (14 byte = 14 * 8bit = 112bit)
21
9 / 16 = 0.5625
- 21. ์ปฌ๋ ์
ํฌ๊ธฐ์ ํ์ฅ
์ปฌ๋ ์
์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์์ด ํ์ฌ์ ์ ์ฅ ์ฉ๋์ ๊ฐ๊น์์ง ์ํ์์, ์ถ๊ฐ์ ์ธ ๋ฐ์ด
ํฐ ์
๋ ฅ ์์ฒญ์ด ๋ฐ์ํ๋ฉด ์๋ก์ด ์
๋ ฅ์ ๋ฐ์๋ค์ผ ์ ์๋๋ก ์ปฌ๋ ์
์ ์ ์ฅ์ฉ๋์ด ์๋
์ ์ผ๋ก ํ์ฅ๋๋ค. ์ด ๊ณผ์ ์์ ๋์ด๋ ์ ์ฅ์ฉ๋์ ๋นํด ์
๋ ฅ์ด ์ถฉ๋ถํ ํฌ์ง ์์ ๊ฒฝ์ฐ
์
๋ ฅ๋น์จ์ด ๋ฎ์์ง๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๊ฐ ์ฆ๊ฐ๋ ์ ์๋ค.
์ปฌ๋ ์
๋ง๋ค ์ ์ฅ์ฉ๋์ ๋๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์ ๊ฐ๊ฐ์ด์ง๋ง, ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ์์ ์ ์ฅ์ฉ
๋์ ๋ ๋ฐฐ๋ก ๋๋ฆฌ๋ ๊ฒ์ด๋ค. ๋ํ์ ์ผ๋ก StringBuffer๊ฐ ์ด ๋ฐฉ์์ ์ฌ์ฉํ๋๋ฐ, ์์์
๋งํ๋ ์๋ฅผ ๊ฐ์ง๊ณ StringBuffer์ ์ ์ฅ์ฉ๋์ ํ์ฅํ ๋ ์ด๋ค ์ผ์ด ์ผ์ด๋๋์ง ์์๋ณด
์.
ํ์ฌ ์์ฑ๋์ด ์๋ StringBufferโ โMY STRINGโ ๋ฌธ์์ด์ ํฌํจํ๊ณ ์๋ โ์ โOF TEXTโ
๋ผ๋ ๋ฌธ์์ด์ ์ถ๊ฐํด ๋ณด์. ๊ทธ๋ฌ๋ฉด ์ด StringBuffer ๊ฐ์ฒด๊ฐ ๊ด๋ฆฌํ๊ฒ ๋๋ ์ด ๋ฌธ์์ด์
โMY STRING OF TEXTโ๊ฐ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด, StringBuffer์ ๊ธฐ๋ณธ ์ฉ๋์ธ 16์ ๋๋
๋ฌธ์๋ค(17๊ฐ์ ๋ฌธ์)์ด ์ ์ฌ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ String์ ์ ์ฅ์ฉ๋์ด ๋ด๋ถ์ ์ผ๋ก ๋์ด๋
๊ฒ ๋๋ค. ๊ทธ๋ฆผ 13์ ๋ณด๋ฉด ์ต์ข
์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํํฉ์ ํ์ธํ ์ ์๋ค.
๊ทธ๋ฆผ 13. 32bit ํ๋ก์ธ์ค ๋ด์์ โMY STRING OF TEXTโ๋ผ๋ ๋ฌธ์์ด์ด ์
๋ ฅ๋ StringBuffer
๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ์ํฉ
๊ทธ๋ฆผ13์์ ๋ณผ ์ ์๋ฏ์ด, ์ด 32๊ฐ์ char ๋ฐฐ์ด์ 17๊ฐ ๊ณต๊ฐ์ด ์ฌ์ฉํ๊ฒ ๋์๊ณ , ์
๋ ฅ
๋น์จ์ 0.53์ผ๋ก 22 ์คํ๋ ค ์ค์ด๋ค์๋ค. ํ์ง๋ง ๋น ๊ณต๊ฐ์ผ๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๋
30byte23๋ก ์คํ๋ ค ๋์ด๋ ๊ฒ์ ์ ์ ์๋ค.
๋ฌผ๋ก , ์์ ํฌ๊ธฐ์ ๋ฌธ์์ด์ด๋ ์ปฌ๋ ์
์์๋ ์
๋ ฅ๋น์จ์ด๋ ๋น ๊ณต๊ฐ์ผ๋ก ์ธํด ๋ฐ์ํ๋
๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๊ฐ ๊ทธ๋ฆฌ ํฐ ๋ฌธ์ ๊ฐ ์๋ ์๋ ์๋ค. ํ์ง๋ง, ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด ์ปค์ง์๋ก ์ด
๋ก ์ธํ ๋ฌธ์ ๋ค์ ํ์คํ ์ฌ๊ฐํด์ง๋ค. ์๋ฅผ ๋ค์ด, StringBuffer ๊ฐ์ฒด์ 16MB์ ๋ฌธ์์ด์ด
22
17 / 32 = 0.53125
23
์ญ์ ์๋ฌธ์๋ 240byte๋ก ๊ธฐ์ ๋์ด ์์ง๋ง, 30byte = 240bit์ ์คํ๋ก ๋ณด์ธ๋ค.
- 22. ์
๋ ฅ๋์ด ์๋ค๋ฉด, char ๋ฐฐ์ด์ 32MB์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํ๊ฒ ๋ ๊ฒ์ด๊ณ , ๊ทธ๋ก ๋ง๋ฏธ์
์ 16MB์ ๋น ๊ณต๊ฐ์ด ์ธ๋ฐ์์ด ๋ญ๋น๋ ์๋ ์๋ค๋ ๋ง์ด ๋๋ค.
- 23. Java Collections: ์์ฝ
ํ8์ ์ง๊ธ๊น์ง ๋ค๋ฃจ์๋ ์ปฌ๋ ์
ํด๋์ค๋ค์ ์์ฑ์ ์ ๋ฆฌํด ๋ณด์๋ค.
Collection ์ฑ๋ฅ ๊ธฐ๋ณธ์ฉ๋ ๋น์ด์์ ๋ 1 ๋ง๊ฐ ์์ ํฌ๊ธฐ๊ฐ ์ ํํ๊ฒ ํ์ฅ ์๊ณ ๋ฆฌ์ฆ
๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋ ๊ณ์ฐ๋๋๊ฐ?
HashSet O(1) 16 144B 360K No x2
HashMap O(1) 16 128 B 360K No x2
Hashtable O(1) 11 104 B 360K No x2+1
LinkedList O(n) 1 48 B 240K Yes +1
ArrayList O(n) 10 88 B 40K No x1.5
StringBuffer O(1) 16 72 B 24 No x2
ํ 8. ์ปฌ๋ ์
ํด๋์ค ์์ฑ ์์ฝ
์ ํ์์ ๋ณผ ์ ์๋ฏ์ด, Hash ๋ฐฉ์์ ์ด์ฉํ๋ ์ปฌ๋ ์
ํด๋์ค์ ์ฑ๋ฅ์ด List ๋ฐฉ์๋ณด๋ค
๋ ์ข์ง๋ง ๋ฉ๋ชจ๋ฆฌ ํจ์จ์์๋ ํ์คํ ๋จ์ด์ง๋ ๊ฒ์ ์ ์ ์๋ค. 24 ๋ง์ฝ ํฐ ๋ฐ์ดํฐ๋ฅผ ๊ด
๋ฆฌํด์ผ ํ๋๋ฐ ์ฑ๋ฅ์ด ๊ฐ์ฅ ์ค์ํ๊ฒ ๊ณ ๋ ค๋์ด์ผ ํ๋ค๋ฉด(์: ๋ฉ๋ชจ๋ฆฌ ์บ์), ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค
๋๋ฅผ ๋ฌด์ํ๊ณ Hash ๋ฐฉ์์ ์ปฌ๋ ์
์ ์ด์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
์ปฌ๋ ์
์ ์ ์ฅ๋์ด์ผ ํ๋ ๋ฐ์ดํฐ์ ์์ด ์๋์ ์ผ๋ก ์ ๊ณ , ์ฑ๋ฅ์ด ํฌ๊ฒ ๋ฌธ์ ๋์ง ์๋
๋ค๋ฉด List ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ArrayList์ LinkedList์ ์ฑ๋ฅ์ ๊ฑฐ์ ๋์ผํ์ง๋ง
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์๋ค. ๊ฐ๋ณ ์
๋ ฅ ์์์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ArrayList๊ฐ ๋
ํจ์จ์ ์ด์ง๋ง, ํฌ๊ธฐ๊ฐ ์ ํํ๊ฒ ๊ณ์ฐ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ธ๋ฐ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์๋
์๋ค. ์
๋ ฅ๋ ์์์ ํฌ๊ธฐ๋ฅผ ์ ํํ ์์ง ๋ชปํ๋ ๊ฒฝ์ฐ์๋ LinkedList๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด
๋ฐ๋์งํ๋ฐ, ์ธ๋ฐ์๋ ๋น ๊ณต๊ฐ์ ๋ง๋ค์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, ์
๋ ฅํ ์์๋ค์ ํฌ๊ธฐ๋ฅผ ์
์ธกํ ์ ์๋์ง ์ฌ๋ถ๊ฐ ArrayList์ LinkedList ์ค ์ด๋ค ๊ฒ์ ์ ํํ ์ง ๊ฒฐ์ ํ๋ ๊ธฐ์ค์ด
๋ ๊ฒ์ด๋ค. ์
๋ ฅ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ์์ธกํ ์ ์์ผ๋ฉด LinkedList๋ฅผ, ํฌ๊ธฐ๋ฅผ ์์ธกํ ์ ์
๋ค๋ฉด ArrayList๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ด ๋๋ค.
24
๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ๊ณผ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ๋ฐ๋น๋กํ๋ ๊ฒฝํฅ์ ๋ณด์ธ๋ค.
- 24. ์ ์ ํ ์ํฉ์ ์ ์ ํ ์ปฌ๋ ์
์ ์ฌ์ฉํจ์ผ๋ก์จ ์ฑ๋ฅ๊ณผ ๋ฉ๋ชจ๋ฆฌ ํจ์จ ์ฌ์ด์์ ๊ท ํ์ ์ก์
์ ์๋ค. ๋, ์
๋ ฅ๋น์จ์ ์ต๋ํํ๊ณ ์ฌ์ฉ๋์ง ์๋ ๋น ๊ณต๊ฐ์ ์ต์ํ ํจ์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ
ํจ์จ์ ์ต๋ํ ํฅ์์ํฌ ์ ์๋ค.
- 25. ์ปฌ๋ ์
์ ์ค ์ฌ์ฉ ์ :
PlantsByWebSphere25์ WebSphere Application Server V7
ํ8์์ Hash ๊ธฐ๋ฐ ์ปฌ๋ ์
์ 1๋ง ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํ๋ฉด 360KB์ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๊ฐ
๋ฐ์ํ๋ค๋ ๊ฒ์ ๋ณธ ์ ์ด ์์ ๊ฒ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก Java ์ดํ๋ฆฌ์ผ์ด์
๋ค์ ๊ธฐ๊ฐ๋ฐ์ดํธ ๋จ
์์ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ๋๋ฏ๋ก, ์ด ์ ๋ ์ค๋ฒํค๋๋ ํฐ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค๊ณ
์๊ฐํ ์๋ ์์ง๋ง, ์ฌ์ฉ๋๋ ์ปฌ๋ ์
์ ์์ด ๋ง์์ง๊ณ ๋ฐ์ดํฐ์ ์์ด ๋์ด๋๋ฉด ๋ฌธ์ ๊ฐ
๋ ์ ์๋ค.
ํ9๋ PlantsByWebSphere์ 5๋ช
์ ์ฌ์ฉ์๋ฅผ ์ด์ฉํ์ฌ ๋ถํ ํ
์คํธ๋ฅผ ํ์ ๋ 206MB์
Java ํ ๋ฉ๋ชจ๋ฆฌ ์ค ์ปฌ๋ ์
๊ฐ์ฒด๋ค์ด ์ฌ์ฉํ๋ ๋ถ๋ถ๋ง ๋ฐ์ทํ ๊ฒ์ด๋ค.
์ปฌ๋ ์
์ ํ ์ธ์คํด์ค์ ์ ์ด ์ปฌ๋ ์
์ค๋ฒํค๋ (MB)
Hashtable 262,234 26.5
WeakHashMap 19,562 12.6
HashMap 10,600 2.3
ArrayList 9,530 0.3
HashSet 1,551 1.0
Vector 1,271 0.04
LinkedList 1,148 0.1
TreeMap 299 0.03
Total 306,195 42.9
ํ 9. PlantsByWebSphere ๋ถํํ
์คํธ ์ ์ปฌ๋ ์
๊ฐ์ฒด๋ค์ด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ํํฉ
์ด ํ์์ ์ ์ ์๋ฏ์ด 30๋ง๊ฐ๊ฐ ๋๋ ์๋ก ๋ค๋ฅธ ์ปฌ๋ ์
๋ค์ด ์ฌ์ฉ๋๊ณ , ๊ทธ ๊ณผ์ ์์ ์ด
206MB์ ๋ฉ๋ชจ๋ฆฌ ์ค 42.9MB(21%์ ๋ฌํ๋!)์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ๋น๋๊ณ ์๋ ๊ฒ์ ์ ์ ์๋ค.
์ด ๋ง์ ์ ๋นํ ์ํฉ์ ์ ์ ํ ์ปฌ๋ ์
์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ด ๋ ์ข์์ง ์ ์์
์ ์๋ฏธํ๋ค.
25
PlantsByWebSphere๋ IBM WebSphere์์ ์ ๊ณตํ๋ ์ํ ์น ์ดํ๋ฆฌ์ผ์ด์
์ด๋ค.
- 26. Memory Analyzer ๋ฅผ ์ด์ฉํ์ฌ ์
๋ ฅ๋น์จ ํ์ธํ๊ธฐ
IBM ์ํฌํธ ์ด์์คํดํธ์์ ์ ๊ณตํ๋IBM ๋ชจ๋ํฐ๋ง ๋ฐ ์ง๋จ ํด(๋ฉ๋ชจ๋ฆฌ ๋ถ์ ํด โ
Memory Analyzer)์ ์ด์ฉํ๋ฉด ์ปฌ๋ ์
๋ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํํฉ์ ๋ถ์ํ ์ ์
๋ค.(Resources ๋ฉ๋ด๋ฅผ ํ์ธํ๋ผ.) ์ด ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ถ์ํ๋ฉด ์ด๋ค ์ปฌ๋ ์
์
์ต์ ํํ ๊ฒ์ธ์ง ๊ฒฐ์ ํ ์ ์๊ฒ ๋๋ค.
Memory Analyzer์์ ์ปฌ๋ ์
๋ถ์ ๊ธฐ๋ฅ์ ์ด์ฉํ๋ ค๋ฉด ๊ทธ๋ฆผ14์์ ๋ณผ ์ ์๋ฏ์ด Open
Query Browser -> Java Collections ๋ฉ๋ด๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค.
๊ทธ๋ฆผ 14. Memory Analyzer ์์ Java ์ปฌ๋ ์
๋ค์ ์
๋ ฅ๋น์จ์ ๋ถ์ํ๋ ๋ฐฉ๋ฒ
๊ทธ๋ฆผ14์์ ๋ณด์ด๋ ๋ฉ๋ด ์ค, [Collection Fill Ratio] ๊ธฐ๋ฅ์ ์ด์ฉํ๋ฉด ์ค์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ณด
๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ์ปฌ๋ ์
์ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ค. ๊ฒ์์ ์ํด ๋ช ๊ฐ์ง
๊ฐ์ ์
๋ ฅํ ์ ์๋๋ฐ ๊ทธ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
๏ท objects : ํ์ธํ๊ณ ์ ํ๋ ๊ฐ์ฒด(์ปฌ๋ ์
)์ ์ ํ(Type)
๏ท segments : ๊ฐ์ฒด๋ค์ ๊ทธ๋ฃน์ง๊ธฐ ์ํ ์
๋ ฅ๋น์จ ๊ฐ์ ๋ฒ์
๊ฒ์ ๊ฐ์ผ๋ก objects์ โjava.util.Hashtableโ์, segments๋ก 10์ ์
๋ ฅํ๊ณ ์กฐํ๋ฅผ ์ํ
ํ๋ฉด ๊ทธ๋ฆผ 15์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
- 27. ๊ทธ๋ฆผ 15. Memory Analyzer ๋ฅผ ์ด์ฉํ์ฌ Hashtable ์ ๋ํ ์
๋ ฅ๋น์จ์ ์กฐํํ ๊ฒฐ๊ณผ
์ ๊ทธ๋ฆผ์์ java.util.Hashtable ์ธ์คํด์ค์ ๊ฐ์๋ 262,234๊ฐ ์ธ๋ฐ, ๊ทธ ์ค 127,016๊ฐ
(48.4%)๊ฐ ์์ ํ ๋น์ด์๊ณ , ๋๋ถ๋ถ ์
๋ ฅ๋น์จ์ด ๋งค์ฐ ์ ์ ๊ฒ์ ์ ์ ์๋ค.26
์ด์ ์ด๋์ ์ฌ์ฉ๋๋ ์ด๋ค ์ปฌ๋ ์
์ด ๋ฌธ์ ๊ฐ ์๋์ง ํ์ธํ๋ ค๋ฉด, ์ ๋ชฉ๋ก ์ค ํ๋์์
์ฐํด๋ฆญํ ๋ค, [incoming references] ๋ฉ๋ด ํน์ [outgoing references] ๋ฉ๋ด๋ฅผ ์ด์ฉํ๋ฉด ๋
๋ค. [incoming references]๋ ์ด๋ค ๊ฐ์ฒด๊ฐ ์ปฌ๋ ์
์ ์์ ํ๊ณ ์๋์ง๋ฅผ ํ์ธํ๋ ๋ฐ์,
[outgoing references]๋ ํด๋น ์ปฌ๋ ์
๋ด์ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ์
๋ ฅ๋์ด ์๋์ง๋ฅผ ํ์ธํ๋
๋ฐ์ ์ฌ์ฉ๋๋ค.
๊ทธ๋ฆผ16์ ์ ๋ชฉ๋ก ์ค ์
๋ ฅ๋น์จ์ด 0์ธ ํญ๋ชฉ์ ๋ํ [incoming references]๋ฅผ ํ์ธํ์ฌ ์
์ ์ธ ๊ฐ์ง ํญ๋ชฉ์ ํ์ฅํ ๊ฒ์ด๋ค.
๊ทธ๋ฆผ 16. ์
๋ ฅ๋น์จ์ด 0 ์ธ Hashtable ์ ๋ํ incoming references ์กฐํ ๊ฒฐ๊ณผ
์ ๊ทธ๋ฆผ์ ์์ธํ ๋ณด๋ฉด, javax.management.remote.rmi.NoCallStackClassLoader์
26
์
๋ ฅ๋น์จ์ด 50%๊ฐ ๋๋ ์ปฌ๋ ์
์ ๊ฐ์๋ ๊ณ ์ 302๊ฐ๋ก ์ ์ฒด์ 0.11%์ ๋ถ๊ณผํ๋ค.
- 28. packages, methodCache, fieldCache์ ๊ฐ์ ํ๋๊ฐ ์
๋ ฅ๋น์จ์ด 0์ธ Hashtable์ธ ๊ฒ์
์ ์ ์๋ค.
Memory Analyzer์ ์ผ์ชฝ ํจ๋์ Attributes ๋ทฐ๋ฅผ ์ด์ฉํ๋ฉด ๊ทธ๋ฆผ17์์์ ๊ฐ์ด ์ ํ๋
Hashtable์ ์์ธํ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค.
๊ทธ๋ฆผ 17. Hashtable ์ธ์คํด์ค์ ๋ํ ์์ธ ์ ๋ณด
์ ๊ทธ๋ฆผ์์ ๋ณผ ์ ์๋ฏ, ์ด Hashtable์ ๊ธฐ๋ณธ ํฌ๊ธฐ์ธ 11์ด๊ณ ์
๋ ฅ๋ ์์์ ๊ฐ์๊ฐ 0
์ธ ๊ฒ์ ์ ์ ์๋ค.
์ด์ javax.management.remote.rmi.NoCallStackClassLoader ์ฝ๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ
์ผ๋ก ์ต์ ํ ํ ์ ์๋ค.
- Hashtable ์ ๋์ค์ ํ ๋นํ๊ธฐ: ํน์ Hashtable ์ด ๋์ฒด๋ก ํ
๋น์ด ์๋ค๋ฉด, ์ค์ ๋ก
๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํ๊ฒ ๋ ๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ์ ์๋ค.27
- Hashtable ์ ์ ์ ํ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๊ธฐ: Hashtable ์ ์์ฑํ ๋ ์ ์ ํ ํฌ๊ธฐ ๊ฐ์
์
๋ ฅํ๋ค๋ฉด ์ธ๋ฐ์์ด ๊ธฐ๋ณธ ํฌ๊ธฐ๋ฅผ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋นํ ํ์๊ฐ ์๋ค.
์ฝ๋๊ฐ ๋์ํ๋ ๋ฐฉ์๊ณผ ์
๋ ฅ๋๋ ๋ฐ์ดํฐ์ ์ ํ์ ๋ฐ๋ผ ๋ ๊ฐ์ง ์ค ํ๋, ํน์ ๋ ๊ฐ์ง
๋ชจ๋๋ฅผ ์ด์ฉํ์ฌ ์ฝ๋๋ฅผ ์ต์ ํํ ์ ์๋ค.
27
์ด๋ฐ ๋ฐฉ์์ Lazy Initialization์ด๋ผ๊ณ ๋ ํ๋ค. Lazy Initialization ๋ฐฉ์์ ์ด์ฉํ ๊ฒฝ์ฐ, ์์์ ์ค
๋ช
ํ ๋๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํํ ์ ์๋ ๋ฐ๋ฉด, ์คํ ๊ณผ์ ์์๋ ์ฑ๋ฅ์ ์ผ๋ก ์คํ๋ ค ์ํด๋ฅผ ๋ณด
๋ ๊ฒฝ์ฐ๋ ์๋ค. ํนํ ๋ณต์กํ๊ณ ๋ฌด๊ฑฐ์ด ๊ฐ์ฒด์ ๋ํด Lazy Initializeํ๋ ๊ฒ์ ๋ฐ๋์งํ์ง ์์ ์
์๋ค. Lazy Initialization์ ๋ํ ์์ธํ ๋ด์ฉ์ http://en.wikipedia.org/wiki/Lazy_initialization๋ฅผ ์ฐธ
์กฐํ๋ผ.
- 29. PlantsByWebSphere ์์์ ๋น ์ปฌ๋ ์
ํ10์ PlantsByWebSphere ์ดํ๋ฆฌ์ผ์ด์
์์ ํ
๋น์ด์๋ ๊ฒ์ผ๋ก ๋ถ์๋ ์ปฌ๋ ์
๋ค์ ๋ชฉ
๋ก์ด๋ค.
์ปฌ๋ ์
์ ํ ์ธ์คํด์ค ์ ๋น์ด์๋ ์ธ์คํด์ค ์ ๋น์ด์๋ ๋น์จ
Hashtable 262,234 127,016 48.4
WeakHashMap 19,562 19,465 99.5
HashMap 10,600 7,599 71.7
ArrayList 9,530 4,588 48.1
HashSet 1,551 866 55.8
Vector 1,271 622 48.9
Total 304,748 160,156 52.6
ํ 10. PlantsByWebSphere ๋ถํํ
์คํธ ํ ๋น์ด์๋ ์ปฌ๋ ์
๋ชฉ๋ก
ํ10์์ ์ ์ ์๋ฏ์ด ์ด 50%๊ฐ ๋๋ ์ปฌ๋ ์
๋ค์ด ๋น์ด์๊ณ , ์ด ๋ง์ ์ ์ ํ ์ปฌ๋ ์
์
์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ฆ๊ฐ์ํฌ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฝ๋๋ฅผ ์ต์ ํํ๋ ์์
์ ์ฌ๋ฌ ๊ฐ์ง ์์ค์์ ์ด๋ฃจ์ด์ง ์ ์๋ค. ์ฆ, PlantsByWebSphere ์ฝ๋, WebSphere ์ดํ
๋ฆฌ์ผ์ด์
์๋ฒ ์ฝ๋, ๊ทธ๋ฆฌ๊ณ ์ปฌ๋ ์
์ฝ๋ ๋ฑ์์ ์ต์ ํ๊ฐ ์ด๋ฃจ์ด์ง ์ ์๋ค.
WebSphere ์ดํ๋ฆฌ์ผ์ด์
์๋ฒ๋ ๋ฒ์ 7์์ ๋ฒ์ 8๋ก ์
๊ทธ๋ ์ด๋๋๋ฉด์, Java ์ปฌ๋ ์
๊ณผ
๋ฏธ๋ค์จ์ด ๊ณ์ธต์์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ํฅ์์ํฌ ์ ์๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์๋ค. ์๋ฅผ ๋ค์ด ์์
์์์ ์ค๋ฒํค๋์ ์๋น ๋ถ๋ถ์ ์ฐจ์งํ๋ ๊ฒ์ผ๋ก ํ์ธ๋ java.util.WeakHashMap์ ์ฌ์ค
์ฝํ ์ฐธ์กฐ๋ฅผ28 ์ฒ๋ฆฌํ๊ธฐ ์ํด ํฌํจํ๊ณ ์๋ java.lang.ref.ReferenceQueue ๋๋ฌธ์ด์๋ค.
๊ทธ๋ฆผ18์ ๋ณด๋ฉด 32bit Java ๋ฐํ์์์ WeakHashMap์ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น๋ฅผ ํ์ธํ ์ ์๋ค.
28
Weak reference. ๋ง ๊ทธ๋๋ก ์ฝํ ์ฐธ์กฐ๋ก, ํน์ ์ธ์คํด์ค์ ๋ํ ์ฐธ์กฐ๊ฐ ์ฝํ ์ฐธ์กฐ๋ง ๋จ์ ์๋ค
๋ฉด ํด๋น ์ธ์คํด์ค๋ Garbage Collection์ ๋์์ด ๋์ด ๋ค์ GC ์ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ๋๋ค.
- 30. ๊ทธ๋ฆผ 18. 32bit Java ํ๋ก์ธ์ค์์์ WeakHashMap ๊ฐ์ฒด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น ์
์ด ๊ทธ๋ฆผ์์ ์ ์ ์๋ฏ์ด, ReferenceQueue ์ธ์คํด์ค๋ 560byte๋ฅผ ๋ณด์ (retain)ํ๊ณ ์
๋๋ฐ, ํ์ฌ WeakHashMap๋ ํ
๋น์ด ์์ผ๋ฏ๋ก ์ด ์ธ์คํด์ค๋ ํ์๊ฐ ์๋ ์ํ์ด๋ค.
PlantsByWebSphere ์ดํ๋ฆฌ์ผ์ด์
์๋ 19,465๊ฐ์ ํ
๋น์ด์๋ WeakHashMap ์ธ์คํด
์ค๊ฐ ์์ฑ๋์ด ์๋๋ฐ, ๋ถํ์ํ ReferenceQueue ์ธ์คํด์ค๊ฐ 10.9MB์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋น
ํ๊ณ ์๋ ๊ฒ์ด๋ค. WebSphere ์ดํ๋ฆฌ์ผ์ด์
์๋ฒ ๋ฒ์ 8๊ณผ IBM์ Java7์์๋
WeakHashMap ํด๋์ค์ ๋ํ ๋ช ๊ฐ์ง ์ต์ ํ๋ฅผ ์ํํ์๋๋ฐ, ๋จผ์ WeakHashMap
๊ฐ์ฒด๊ฐ ํฌํจํ๊ณ ์๋ ReferenceQueue๊ฐ ์ค์ ๋ก ํ์ํ ๋์ ํ ๋น๋๋๋ก ํ์ฌ ํ
๋น
์ํ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ๋ ํ์์ ์ ๊ฑฐํ๋ค.
- 31. ๊ฒฐ๋ก
ํ๋์ ์ดํ๋ฆฌ์ผ์ด์
๋ด์ ๋๋ ๋งํผ ๋ง์ ์์ ์ปฌ๋ ์
์ด ์ฌ์ฉ๋๊ณ , ์ดํ๋ฆฌ์ผ์ด์
์ด ๋ณต
์กํ๋ฉด ๋ณต์กํ ์๋ก ๋ ๋ง์ ์ปฌ๋ ์
์ด ์ฌ์ฉ๋๋ค. ์ ์ ํ ์์น์ ์ ์ ํ ์ปฌ๋ ์
์ ์ฌ์ฉํ
๊ณ , ์ ๋นํ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๊ณ , ๊ทธ๋ฆฌ๊ณ ์ ์ ํ ์๊ธฐ์ ์์ฑํจ์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจ์จ์ ๋
์ผ ์ ์๋ค. ์ด๋ฐ ๋ฐฉ๋ฒ๋ค์ ๋์ฒด๋ก ์ค๊ณ ๊ณผ์ ์ด๋ ๊ฐ๋ฐ ๊ณผ์ ์์ ์ ์ฉ๋์ง๋ง, Memory
Analyzer์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ด์ฉํ๋ฉด ์ด๋ฏธ ๋ง๋ค์ด์ ธ ์๋ ์ดํ๋ฆฌ์ผ์ด์
์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์
์ผ๋ก ์ด์ฉํ๋๋ก ๋ถ์ํ๊ณ ์์ ํ ์๋ ์๋ค.