SlideShare uma empresa Scribd logo
1 de 31
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๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์—์„œ- ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•

    ์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•  ๊ฒƒ์ด๋‹ค.
๋ฐฐ๊ฒฝ์ง€์‹: 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์„ ์ฐธ๊ณ ํ•˜๋ผ.
๊ณต๊ฐ„์ด ๋œ๋‹ค.

        ๊ทธ๋Ÿฌ๋ฏ€๋กœ, 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๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
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 ๋“ฑ์„ ๋“ค ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ฆผ 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๊ณผ ๊ฐ™์€)๋“ค์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฉ”๋ชจ

      ๋ฆฌ๋ฅผ ํ•„์š”๋กœ ํ•˜๊ฒŒ ๋œ๋‹ค.
์ข€ ๋” ๋ณต์žกํ•œ ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ๋ถ„์„
         ์ œ๋Œ€๋กœ    ๋œ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์™€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์บก์Šํ™”(๋ฐ์ดํ„ฐ๋ฅผ ์ˆจ๊ธฐ๊ณ  ๊ทธ๊ฒƒ์„

         ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณต)์™€ ์œ„์ž„(์‹ค์ œ ์ž‘์—… ์ˆ˜ํ–‰์„ ๋‹ด๋‹นํ•˜๋Š” ๋„์šฐ๋ฏธ ํด๋ž˜์Šค๋ฅผ

         ์ œ๊ณต)์„ ์ ์ ˆํžˆ ์ž˜ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ ๋“ค ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ณธ์งˆ์ ์œผ๋กœ, ์บก์Šํ™”์™€ ์œ„์ž„์„ ์ด์šฉํ•œ
         ๋‹ค๋Š” ๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๊ฐ€์ง€์˜ ํด๋ž˜์Šค๋“ค์ด ์„œ๋กœ ์—ฐ๊ด€๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
         ์‰ฌ์šด ์˜ˆ๋กœ 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์„ ์ฐธ์กฐํ•˜๊ธฐ

๋ฐ”๋ž€๋‹ค.
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๋กœ ์‹คํ–‰๋  ๋•Œ ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์˜ ํ•„๋“œ๋“ค์„ ์œ„ํ•ด ํ• ๋‹น๋˜๋Š” ๋ฉ”

    ๋ชจ๋ฆฌ์˜ ์–‘์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
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) ๊ธฐ์ˆ ๊ณผ
Compressed OOPs (-XX:+UseCompressedOops) ๊ธฐ์ˆ ์„ ์ œ๊ณต 10 ํ•˜๋Š”๋ฐ, ์ด ๊ธฐ๋ฒ•์„ ์ด์šฉํ•˜

        ๋ฉด ๊ฐ์ฒด๋ฅผ 64bit ๋ฐฉ์‹์œผ๋กœ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  32bit ๋ฐฉ์‹์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ์ด
        ์šฉํ•  ๊ฒฝ์šฐ, ์œ„์—์„œ ๋งํ•œ 70%์˜ ๋ฉ”๋ชจ๋ฆฌ ์ถ”๊ฐ€์‚ฌ์šฉ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์˜ต์…˜์€
        Native ํž™ ๋ฉ”๋ชจ๋ฆฌ์˜ ์‚ฌ์šฉ๋Ÿ‰์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, Native ํž™์— ๋Œ€ํ•ด์„œ๋Š” ์—ฌ์ „ํžˆ

        64bit ํ”„๋กœ์„ธ์Šค๊ฐ€ 32bit ํ”„๋กœ์„ธ์Šค์— ๋น„ํ•ด ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.




10
     ์ฐธ์กฐ ์••์ถ•๊ณผ ๊ฐ์ฒด ์••์ถ• ๊ธฐ๋ฒ•. ํ•˜์ง€๋งŒ ์ด ์˜ต์…˜์„ ์ง€์ •ํ•  ๊ฒฝ์šฐ ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ JVM์ด ์ •์ง€(crash)ํ•˜

๋Š” ์ผ์ด ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ•œ๋‹ค.
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
     ๊ธฐ๋Šฅ์ด ์ œํ•œ์ ์ด๋ผ๋Š” ๋ง๋กœ ์˜คํ•ดํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ €์žฅ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์กฐ๊ฑด์ด ์ œํ•œ์ ์ด๋ผ๊ณ 
์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๋” ์˜ณ์„ ๋“ฏ ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ ๊ธฐ๋Šฅ์ ์œผ๋กœ๋งŒ ๋ณธ๋‹ค๋ฉด โ€œ๋ฐ์ดํ„ฐ๋ฅผ ์ œํ•œํ•˜๋Š” ๊ธฐ๋Šฅโ€์ด

์ถ”๊ฐ€๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ์ด๋‹ค.
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๋ฅผ ์ฐธ์กฐํ•˜๋ผ.
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
์ฆ‰, 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]๋ฅผ ์ฐธ๊ณ ํ•˜๊ธฐ ๋ฐ”๋ž€
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 ์ถ”๊ฐ€




๋‹ค.
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
     ์ •๋ง ๋™์–ด๋ฐ˜๋ณต์ ์ธ ์„ค๋ช…์ด๋‹ค.
๊ทธ๋ฆผ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 ๋Š” ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋Š” ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค์ด๋‹ค.(์‹œํ€€์Šค๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.) ์ด
           ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•  ๊ฒฝ์šฐ, ๋ฆฌ์ŠคํŠธ ๋‚ด์— ํ•˜๋‚˜ ํ•˜๋‚˜์˜ ์š”์†Œ๋“ค์ด ์ž…๋ ฅ๋˜๋Š” ์œ„์น˜์—
           ๋Œ€ํ•œ ์„ธ๋ฐ€ํ•œ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ์ •ํ•ด์ง„ ์ •์ˆ˜ํ˜•์˜ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ ๋‚ด์˜
ํŠน์ • ์š”์†Œ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค. 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 ๊ฐ์ฒด ๋‚ด์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด์ด ์ €์žฅ ์šฉ๋Ÿ‰๋ณด๋‹ค ํฌ์ง€
์•Š์„ ๋•Œ์—๋Š” ์ƒˆ๋กœ์šด ๋‚ด๋ถ€ ๋ฒ„ํผ ๋ฐฐ์—ด์„ ํ• ๋‹นํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ทธ ํฌ๊ธฐ๋ณด๋‹ค ์ปค์ง€๋ฉด
        ๋‚ด๋ถ€ ๋ฒ„ํผ๊ฐ€ ์ž๋™์ ์œผ๋กœ ์ฆ๊ฐ€๋œ๋‹ค.


        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 ๊ฐ์ฒด์˜ ํŠน์ง•
์ปฌ๋ ‰์…˜ ๋‚ด์˜ ๋นˆ ๊ณต๊ฐ„๋“ค
          ์ง€๊ธˆ๊นŒ์ง€         ๋ด ์™”๋˜, ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ปฌ๋ ‰์…˜๋“ค์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ์— ๋Œ€ํ•œ ๋ชจ๋“ 

          ๋‚ด์šฉ์€ ์•„๋‹ˆ๋‹ค.        ์ง€๊ธˆ๊นŒ์ง€์˜ ์˜ˆ์—์„œ ๊ฐ ์ปฌ๋ ‰์…˜์˜ ํฌ๊ธฐ๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ์ธก์ •๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜

          ๋Ÿผ ์„ค๋ช…ํ–ˆ์—ˆ๋Š”๋ฐ, ์‚ฌ์‹ค ๋Œ€์ฒด๋กœ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ปฌ๋ ‰์…˜๋“ค์€ ์ดˆ๊ธฐ ์ €์žฅ์šฉ๋Ÿ‰์„ ๋ฐ”ํƒ•
          ์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ , ๋ฐ์ดํ„ฐ๋“ค์ด ์ƒ์„ฑ๋œ ์ปฌ๋ ‰์…˜ ์•ˆ์— ์ž…๋ ฅ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋Š” ๋ง์€, ์ดˆ๊ธฐ ์ €์žฅ์šฉ๋Ÿ‰
          ์ด ์‹ค์ œ๋กœ ์ž…๋ ฅ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ณด๋‹ค ๋” ํฌ๋‹ค๋ฉด ๊ทธ ์ฐจ์ด๋งŒํผ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ƒ๊ธด๋‹ค๋Š” ์˜

          ๋ฏธ๊ฐ€ ๋œ๋‹ค.

          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
์ž…๋ ฅ๋น„์œจ์ด ๋‚ฎ์„์ˆ˜๋ก ์“ธ๋ฐ์—†์ด ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ปค์ง€๊ฒŒ ๋˜์–ด ๊ฒฐ๊ณผ์ ์œผ๋กœ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€

๋” ์ปค์ง€๊ฒŒ ๋œ๋‹ค.
์ปฌ๋ ‰์…˜ ํฌ๊ธฐ์˜ ํ™•์žฅ
          ์ปฌ๋ ‰์…˜์—       ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ํ˜„์žฌ์˜ ์ €์žฅ ์šฉ๋Ÿ‰์— ๊ฐ€๊นŒ์›Œ์ง„ ์ƒํƒœ์—์„œ, ์ถ”๊ฐ€์ ์ธ ๋ฐ์ด

          ํ„ฐ ์ž…๋ ฅ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ž…๋ ฅ์„ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋„๋ก ์ปฌ๋ ‰์…˜์˜ ์ €์žฅ์šฉ๋Ÿ‰์ด ์ž๋™

          ์ ์œผ๋กœ ํ™•์žฅ๋œ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๋Š˜์–ด๋‚œ ์ €์žฅ์šฉ๋Ÿ‰์— ๋น„ํ•ด ์ž…๋ ฅ์ด ์ถฉ๋ถ„ํžˆ ํฌ์ง€ ์•Š์„ ๊ฒฝ์šฐ
          ์ž…๋ ฅ๋น„์œจ์ด ๋‚ฎ์•„์ง€๊ณ  ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ฆ๊ฐ€๋  ์ˆ˜ ์žˆ๋‹ค.

          ์ปฌ๋ ‰์…˜๋งˆ๋‹ค ์ €์žฅ์šฉ๋Ÿ‰์„ ๋Š˜๋ฆฌ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ œ๊ฐ๊ฐ์ด์ง€๋งŒ, ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹์€ ์ €์žฅ์šฉ
          ๋Ÿ‰์„ ๋‘ ๋ฐฐ๋กœ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ 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์˜ ์˜คํƒ€๋กœ ๋ณด์ธ๋‹ค.
์ž…๋ ฅ๋˜์–ด ์žˆ๋‹ค๋ฉด, char ๋ฐฐ์—ด์€ 32MB์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๊ณ , ๊ทธ๋กœ ๋ง๋ฏธ์•”

์•„ 16MB์˜ ๋นˆ ๊ณต๊ฐ„์ด ์“ธ๋ฐ์—†์ด ๋‚ญ๋น„๋  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๋ง์ด ๋œ๋‹ค.
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
     ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์€ ๋ฐ˜๋น„๋ก€ํ•˜๋Š” ๊ฒฝํ–ฅ์„ ๋ณด์ธ๋‹ค.
์ ์ ˆํ•œ ์ƒํ™ฉ์— ์ ์ ˆํ•œ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ ์‚ฌ์ด์—์„œ ๊ท ํ˜•์„ ์žก์„
์ˆ˜ ์žˆ๋‹ค. ๋˜, ์ž…๋ ฅ๋น„์œจ์„ ์ตœ๋Œ€ํ™”ํ•˜๊ณ  ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋นˆ ๊ณต๊ฐ„์„ ์ตœ์†Œํ™” ํ•จ์œผ๋กœ์จ ๋ฉ”๋ชจ๋ฆฌ

ํšจ์œจ์„ ์ตœ๋Œ€ํ•œ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
์ปฌ๋ ‰์…˜์˜ ์‹ค ์‚ฌ์šฉ ์˜ˆ :
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์—์„œ ์ œ๊ณตํ•˜๋Š” ์ƒ˜ํ”Œ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‹ค.
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์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ฆผ 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%์— ๋ถˆ๊ณผํ•˜๋‹ค.
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๋ฅผ ์ฐธ

์กฐํ•˜๋ผ.
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 ์‹œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋œ๋‹ค.
๊ทธ๋ฆผ 18. 32bit Java ํ”„๋กœ์„ธ์Šค์—์„œ์˜ WeakHashMap ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ฐฐ์น˜ ์˜ˆ


 ์ด ๊ทธ๋ฆผ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, ReferenceQueue ์ธ์Šคํ„ด์Šค๋Š” 560byte๋ฅผ ๋ณด์œ (retain)ํ•˜๊ณ  ์žˆ

 ๋Š”๋ฐ, ํ˜„์žฌ WeakHashMap๋Š” ํ…… ๋น„์–ด ์žˆ์œผ๋ฏ€๋กœ ์ด ์ธ์Šคํ„ด์Šค๋Š” ํ•„์š”๊ฐ€ ์—†๋Š” ์ƒํƒœ์ด๋‹ค.

 PlantsByWebSphere ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” 19,465๊ฐœ์˜ ํ…… ๋น„์–ด์žˆ๋Š” WeakHashMap ์ธ์Šคํ„ด

 ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ, ๋ถˆํ•„์š”ํ•œ ReferenceQueue ์ธ์Šคํ„ด์Šค๊ฐ€ 10.9MB์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ—ˆ๋น„

 ํ•˜๊ณ    ์žˆ๋Š”   ๊ฒƒ์ด๋‹ค.   WebSphere   ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜   ์„œ๋ฒ„   ๋ฒ„์ „8๊ณผ   IBM์˜   Java7์—์„œ๋Š”

 WeakHashMap ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜์˜€๋Š”๋ฐ, ๋จผ์ € WeakHashMap
 ๊ฐ์ฒด๊ฐ€ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ReferenceQueue๊ฐ€ ์‹ค์ œ๋กœ ํ•„์š”ํ•  ๋•Œ์— ํ• ๋‹น๋˜๋„๋ก ํ•˜์—ฌ ํ…… ๋นˆ

 ์ƒํƒœ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚ญ๋น„ํ•˜๋Š” ํ˜„์ƒ์„ ์ œ๊ฑฐํ–ˆ๋‹ค.
๊ฒฐ๋ก 
     ํ•˜๋‚˜์˜   ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์— ๋†€๋ž„ ๋งŒํผ ๋งŽ์€ ์ˆ˜์˜ ์ปฌ๋ ‰์…˜์ด ์‚ฌ์šฉ๋˜๊ณ , ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ณต

     ์žกํ•˜๋ฉด ๋ณต์žกํ• ์ˆ˜๋ก ๋” ๋งŽ์€ ์ปฌ๋ ‰์…˜์ด ์‚ฌ์šฉ๋œ๋‹ค. ์ ์ ˆํ•œ ์œ„์น˜์— ์ ์ ˆํ•œ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜

     ๊ณ , ์ ๋‹นํ•œ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๊ณ , ๊ทธ๋ฆฌ๊ณ  ์ ์ ˆํ•œ ์‹œ๊ธฐ์— ์ƒ์„ฑํ•จ์œผ๋กœ์จ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํšจ์œจ์„ ๋†’
     ์ผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๋ฐฉ๋ฒ•๋“ค์€ ๋Œ€์ฒด๋กœ ์„ค๊ณ„ ๊ณผ์ •์ด๋‚˜ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์ ์šฉ๋˜์ง€๋งŒ, Memory
     Analyzer์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ 

     ์œผ๋กœ ์ด์šฉํ•˜๋„๋ก ๋ถ„์„ํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

Mais conteรบdo relacionado

Destaque

iOS Human Interface Guidlines #12_SYS4U
iOS Human Interface Guidlines #12_SYS4UiOS Human Interface Guidlines #12_SYS4U
iOS Human Interface Guidlines #12_SYS4U
sys4u
ย 
Memory_leak_patterns_in_JavaScript_SYS4U
Memory_leak_patterns_in_JavaScript_SYS4UMemory_leak_patterns_in_JavaScript_SYS4U
Memory_leak_patterns_in_JavaScript_SYS4U
sys4u
ย 
Observer Design Pattern in Java_SYS4U
Observer Design Pattern in Java_SYS4UObserver Design Pattern in Java_SYS4U
Observer Design Pattern in Java_SYS4U
sys4u
ย 
iOS Human Interface Guidlines #11_SYS4U
iOS Human Interface Guidlines #11_SYS4UiOS Human Interface Guidlines #11_SYS4U
iOS Human Interface Guidlines #11_SYS4U
sys4u
ย 
iOS Human Interface Guidlines #10_SYS4U
iOS Human Interface Guidlines #10_SYS4UiOS Human Interface Guidlines #10_SYS4U
iOS Human Interface Guidlines #10_SYS4U
sys4u
ย 
iOS_Human_Interface_Guidlines_#4_SYS4U
iOS_Human_Interface_Guidlines_#4_SYS4UiOS_Human_Interface_Guidlines_#4_SYS4U
iOS_Human_Interface_Guidlines_#4_SYS4U
sys4u
ย 
30_eCommerce_sites_using_html5_SYS4U
30_eCommerce_sites_using_html5_SYS4U30_eCommerce_sites_using_html5_SYS4U
30_eCommerce_sites_using_html5_SYS4U
sys4u
ย 
Java_Concurrency_Programming_SYS4U
Java_Concurrency_Programming_SYS4UJava_Concurrency_Programming_SYS4U
Java_Concurrency_Programming_SYS4U
sys4u
ย 
2013 UX Design Trend Report Part 3_SYS4U I&C
2013 UX Design Trend Report Part 3_SYS4U I&C2013 UX Design Trend Report Part 3_SYS4U I&C
2013 UX Design Trend Report Part 3_SYS4U I&C
sys4u
ย 
JavaEE6 Tutorial - Java Message Service_sys4u
JavaEE6 Tutorial - Java Message Service_sys4uJavaEE6 Tutorial - Java Message Service_sys4u
JavaEE6 Tutorial - Java Message Service_sys4u
sys4u
ย 
Aspect Oriented Programming_SYS4U I&C
Aspect Oriented Programming_SYS4U I&CAspect Oriented Programming_SYS4U I&C
Aspect Oriented Programming_SYS4U I&C
sys4u
ย 
iOS Human Interface Guidlines #14_SYS4U
iOS Human Interface Guidlines #14_SYS4UiOS Human Interface Guidlines #14_SYS4U
iOS Human Interface Guidlines #14_SYS4U
sys4u
ย 
NAT and Hole Punching_SYS4U I&C
NAT and Hole Punching_SYS4U I&CNAT and Hole Punching_SYS4U I&C
NAT and Hole Punching_SYS4U I&C
sys4u
ย 
Implementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4UImplementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4U
sys4u
ย 
Java reflection & introspection_SYS4U I&C
Java reflection & introspection_SYS4U I&CJava reflection & introspection_SYS4U I&C
Java reflection & introspection_SYS4U I&C
sys4u
ย 
About Color_SYS4U
About Color_SYS4UAbout Color_SYS4U
About Color_SYS4U
sys4u
ย 
2012 UX Design Trend Report Part 2_SYS4U I&C
2012 UX Design Trend Report Part 2_SYS4U I&C2012 UX Design Trend Report Part 2_SYS4U I&C
2012 UX Design Trend Report Part 2_SYS4U I&C
sys4u
ย 

Destaque (17)

iOS Human Interface Guidlines #12_SYS4U
iOS Human Interface Guidlines #12_SYS4UiOS Human Interface Guidlines #12_SYS4U
iOS Human Interface Guidlines #12_SYS4U
ย 
Memory_leak_patterns_in_JavaScript_SYS4U
Memory_leak_patterns_in_JavaScript_SYS4UMemory_leak_patterns_in_JavaScript_SYS4U
Memory_leak_patterns_in_JavaScript_SYS4U
ย 
Observer Design Pattern in Java_SYS4U
Observer Design Pattern in Java_SYS4UObserver Design Pattern in Java_SYS4U
Observer Design Pattern in Java_SYS4U
ย 
iOS Human Interface Guidlines #11_SYS4U
iOS Human Interface Guidlines #11_SYS4UiOS Human Interface Guidlines #11_SYS4U
iOS Human Interface Guidlines #11_SYS4U
ย 
iOS Human Interface Guidlines #10_SYS4U
iOS Human Interface Guidlines #10_SYS4UiOS Human Interface Guidlines #10_SYS4U
iOS Human Interface Guidlines #10_SYS4U
ย 
iOS_Human_Interface_Guidlines_#4_SYS4U
iOS_Human_Interface_Guidlines_#4_SYS4UiOS_Human_Interface_Guidlines_#4_SYS4U
iOS_Human_Interface_Guidlines_#4_SYS4U
ย 
30_eCommerce_sites_using_html5_SYS4U
30_eCommerce_sites_using_html5_SYS4U30_eCommerce_sites_using_html5_SYS4U
30_eCommerce_sites_using_html5_SYS4U
ย 
Java_Concurrency_Programming_SYS4U
Java_Concurrency_Programming_SYS4UJava_Concurrency_Programming_SYS4U
Java_Concurrency_Programming_SYS4U
ย 
2013 UX Design Trend Report Part 3_SYS4U I&C
2013 UX Design Trend Report Part 3_SYS4U I&C2013 UX Design Trend Report Part 3_SYS4U I&C
2013 UX Design Trend Report Part 3_SYS4U I&C
ย 
JavaEE6 Tutorial - Java Message Service_sys4u
JavaEE6 Tutorial - Java Message Service_sys4uJavaEE6 Tutorial - Java Message Service_sys4u
JavaEE6 Tutorial - Java Message Service_sys4u
ย 
Aspect Oriented Programming_SYS4U I&C
Aspect Oriented Programming_SYS4U I&CAspect Oriented Programming_SYS4U I&C
Aspect Oriented Programming_SYS4U I&C
ย 
iOS Human Interface Guidlines #14_SYS4U
iOS Human Interface Guidlines #14_SYS4UiOS Human Interface Guidlines #14_SYS4U
iOS Human Interface Guidlines #14_SYS4U
ย 
NAT and Hole Punching_SYS4U I&C
NAT and Hole Punching_SYS4U I&CNAT and Hole Punching_SYS4U I&C
NAT and Hole Punching_SYS4U I&C
ย 
Implementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4UImplementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4U
ย 
Java reflection & introspection_SYS4U I&C
Java reflection & introspection_SYS4U I&CJava reflection & introspection_SYS4U I&C
Java reflection & introspection_SYS4U I&C
ย 
About Color_SYS4U
About Color_SYS4UAbout Color_SYS4U
About Color_SYS4U
ย 
2012 UX Design Trend Report Part 2_SYS4U I&C
2012 UX Design Trend Report Part 2_SYS4U I&C2012 UX Design Trend Report Part 2_SYS4U I&C
2012 UX Design Trend Report Part 2_SYS4U I&C
ย 

Semelhante a From Java code to Java heap_SYS4U I&C

๋ฆฌ์†Œ์Šค ์ค‘์‹ฌ์˜ ์„œ๋“ ์–ดํƒ2 ์‹ค์‹œ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ํ”„๋กœํŒŒ์ผ๋ง ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ๊ธฐ
๋ฆฌ์†Œ์Šค ์ค‘์‹ฌ์˜ ์„œ๋“ ์–ดํƒ2 ์‹ค์‹œ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ํ”„๋กœํŒŒ์ผ๋ง ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ๊ธฐ๋ฆฌ์†Œ์Šค ์ค‘์‹ฌ์˜ ์„œ๋“ ์–ดํƒ2 ์‹ค์‹œ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ํ”„๋กœํŒŒ์ผ๋ง ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ๊ธฐ
๋ฆฌ์†Œ์Šค ์ค‘์‹ฌ์˜ ์„œ๋“ ์–ดํƒ2 ์‹ค์‹œ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ํ”„๋กœํŒŒ์ผ๋ง ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ๊ธฐ
Wonha Ryu
ย 
Windows system - memory๊ฐœ๋…์žก๊ธฐ
Windows system - memory๊ฐœ๋…์žก๊ธฐWindows system - memory๊ฐœ๋…์žก๊ธฐ
Windows system - memory๊ฐœ๋…์žก๊ธฐ
ChangKyu Song
ย 
Gpg2 2 1_10_๋“œ๋กญ์ธ๋””๋ฒ„๊ทธ๋ฉ”๋ชจ๋ฆฌ๊ด€๋ฆฌ์ž
Gpg2 2 1_10_๋“œ๋กญ์ธ๋””๋ฒ„๊ทธ๋ฉ”๋ชจ๋ฆฌ๊ด€๋ฆฌ์žGpg2 2 1_10_๋“œ๋กญ์ธ๋””๋ฒ„๊ทธ๋ฉ”๋ชจ๋ฆฌ๊ด€๋ฆฌ์ž
Gpg2 2 1_10_๋“œ๋กญ์ธ๋””๋ฒ„๊ทธ๋ฉ”๋ชจ๋ฆฌ๊ด€๋ฆฌ์ž
Young-jun Jeong
ย 
Programming java day2
Programming java day2Programming java day2
Programming java day2
Jaehoonyam
ย 
Visual C++10์„ ํ™œ์šฉํ•œ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
Visual C++10์„ ํ™œ์šฉํ•œ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐVisual C++10์„ ํ™œ์šฉํ•œ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
Visual C++10์„ ํ™œ์šฉํ•œ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
ํฅ๋ฐฐ ์ตœ
ย 
Segmentation and Paging
Segmentation and PagingSegmentation and Paging
Segmentation and Paging
QooJuice
ย 

Semelhante a From Java code to Java heap_SYS4U I&C (20)

[16]Obfuscation 101 : ๋‚œ๋…ํ™”, ํ”„๋กœ๊ฐ€๋“œ, R8, ํŠธ๋žœ์Šคํฌ๋จธ API
[16]Obfuscation 101 : ๋‚œ๋…ํ™”, ํ”„๋กœ๊ฐ€๋“œ, R8, ํŠธ๋žœ์Šคํฌ๋จธ API[16]Obfuscation 101 : ๋‚œ๋…ํ™”, ํ”„๋กœ๊ฐ€๋“œ, R8, ํŠธ๋žœ์Šคํฌ๋จธ API
[16]Obfuscation 101 : ๋‚œ๋…ํ™”, ํ”„๋กœ๊ฐ€๋“œ, R8, ํŠธ๋žœ์Šคํฌ๋จธ API
ย 
๋ฆฌ์†Œ์Šค ์ค‘์‹ฌ์˜ ์„œ๋“ ์–ดํƒ2 ์‹ค์‹œ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ํ”„๋กœํŒŒ์ผ๋ง ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ๊ธฐ
๋ฆฌ์†Œ์Šค ์ค‘์‹ฌ์˜ ์„œ๋“ ์–ดํƒ2 ์‹ค์‹œ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ํ”„๋กœํŒŒ์ผ๋ง ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ๊ธฐ๋ฆฌ์†Œ์Šค ์ค‘์‹ฌ์˜ ์„œ๋“ ์–ดํƒ2 ์‹ค์‹œ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ํ”„๋กœํŒŒ์ผ๋ง ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ๊ธฐ
๋ฆฌ์†Œ์Šค ์ค‘์‹ฌ์˜ ์„œ๋“ ์–ดํƒ2 ์‹ค์‹œ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ํ”„๋กœํŒŒ์ผ๋ง ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ๊ธฐ
ย 
Effective STL 1~4์žฅ ์ •๋ฆฌ
Effective STL 1~4์žฅ ์ •๋ฆฌEffective STL 1~4์žฅ ์ •๋ฆฌ
Effective STL 1~4์žฅ ์ •๋ฆฌ
ย 
Runtime Data Areas_Wh apm
Runtime Data Areas_Wh apmRuntime Data Areas_Wh apm
Runtime Data Areas_Wh apm
ย 
JVM ๋ฉ”๋ชจ๋ฆฌ ํ•ด๋ถ€ํ•™
JVM ๋ฉ”๋ชจ๋ฆฌ ํ•ด๋ถ€ํ•™JVM ๋ฉ”๋ชจ๋ฆฌ ํ•ด๋ถ€ํ•™
JVM ๋ฉ”๋ชจ๋ฆฌ ํ•ด๋ถ€ํ•™
ย 
Windows system - memory๊ฐœ๋…์žก๊ธฐ
Windows system - memory๊ฐœ๋…์žก๊ธฐWindows system - memory๊ฐœ๋…์žก๊ธฐ
Windows system - memory๊ฐœ๋…์žก๊ธฐ
ย 
Alignment
AlignmentAlignment
Alignment
ย 
Gpg2 2 1_10_๋“œ๋กญ์ธ๋””๋ฒ„๊ทธ๋ฉ”๋ชจ๋ฆฌ๊ด€๋ฆฌ์ž
Gpg2 2 1_10_๋“œ๋กญ์ธ๋””๋ฒ„๊ทธ๋ฉ”๋ชจ๋ฆฌ๊ด€๋ฆฌ์žGpg2 2 1_10_๋“œ๋กญ์ธ๋””๋ฒ„๊ทธ๋ฉ”๋ชจ๋ฆฌ๊ด€๋ฆฌ์ž
Gpg2 2 1_10_๋“œ๋กญ์ธ๋””๋ฒ„๊ทธ๋ฉ”๋ชจ๋ฆฌ๊ด€๋ฆฌ์ž
ย 
์Šคํƒ€ํŠธ์—… ์‚ฌ๋ก€๋กœ ๋ณธ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ ๋ถ„์„ : Tajo on AWS
์Šคํƒ€ํŠธ์—… ์‚ฌ๋ก€๋กœ ๋ณธ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ ๋ถ„์„ : Tajo on AWS์Šคํƒ€ํŠธ์—… ์‚ฌ๋ก€๋กœ ๋ณธ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ ๋ถ„์„ : Tajo on AWS
์Šคํƒ€ํŠธ์—… ์‚ฌ๋ก€๋กœ ๋ณธ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ ๋ถ„์„ : Tajo on AWS
ย 
System+os study 5
System+os study 5System+os study 5
System+os study 5
ย 
Programming java day2
Programming java day2Programming java day2
Programming java day2
ย 
System+os study 1
System+os study 1System+os study 1
System+os study 1
ย 
๋ฐ์ดํ„ฐ ๋ถ„์„ 1 - ์†Œ๊ฐœ
๋ฐ์ดํ„ฐ ๋ถ„์„ 1 - ์†Œ๊ฐœ๋ฐ์ดํ„ฐ ๋ถ„์„ 1 - ์†Œ๊ฐœ
๋ฐ์ดํ„ฐ ๋ถ„์„ 1 - ์†Œ๊ฐœ
ย 
Visual C++10์„ ํ™œ์šฉํ•œ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
Visual C++10์„ ํ™œ์šฉํ•œ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐVisual C++10์„ ํ™œ์šฉํ•œ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
Visual C++10์„ ํ™œ์šฉํ•œ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
ย 
16 ์Šค๋ ˆ๋“œ ์Šคํƒ
16 ์Šค๋ ˆ๋“œ ์Šคํƒ16 ์Šค๋ ˆ๋“œ ์Šคํƒ
16 ์Šค๋ ˆ๋“œ ์Šคํƒ
ย 
๋ฉด์ ‘ ๋Œ€๋น„ ๋ฒกํ„ฐ, CS ๊ฐœ๋…๊ณผ ์‚ฌ๋ก€
๋ฉด์ ‘ ๋Œ€๋น„ ๋ฒกํ„ฐ, CS ๊ฐœ๋…๊ณผ ์‚ฌ๋ก€๋ฉด์ ‘ ๋Œ€๋น„ ๋ฒกํ„ฐ, CS ๊ฐœ๋…๊ณผ ์‚ฌ๋ก€
๋ฉด์ ‘ ๋Œ€๋น„ ๋ฒกํ„ฐ, CS ๊ฐœ๋…๊ณผ ์‚ฌ๋ก€
ย 
แ„‰แ…ณแ„‘แ…ณแ„…แ…ตแ†ผ แ„‰แ…ณแ„แ…ฅแ„ƒแ…ต 1แ„Œแ…กแ†ผ
แ„‰แ…ณแ„‘แ…ณแ„…แ…ตแ†ผ แ„‰แ…ณแ„แ…ฅแ„ƒแ…ต 1แ„Œแ…กแ†ผแ„‰แ…ณแ„‘แ…ณแ„…แ…ตแ†ผ แ„‰แ…ณแ„แ…ฅแ„ƒแ…ต 1แ„Œแ…กแ†ผ
แ„‰แ…ณแ„‘แ…ณแ„…แ…ตแ†ผ แ„‰แ…ณแ„แ…ฅแ„ƒแ…ต 1แ„Œแ…กแ†ผ
ย 
Segmentation and Paging
Segmentation and PagingSegmentation and Paging
Segmentation and Paging
ย 
แ„†แ…ฉแ†ผแ„€แ…ฉแ„ƒแ…ตแ„‡แ…ตแ„€แ…ญแ„‹แ…ฒแ†จ1แ„‹แ…ตแ†ฏแ„Žแ…ก
แ„†แ…ฉแ†ผแ„€แ…ฉแ„ƒแ…ตแ„‡แ…ตแ„€แ…ญแ„‹แ…ฒแ†จ1แ„‹แ…ตแ†ฏแ„Žแ…กแ„†แ…ฉแ†ผแ„€แ…ฉแ„ƒแ…ตแ„‡แ…ตแ„€แ…ญแ„‹แ…ฒแ†จ1แ„‹แ…ตแ†ฏแ„Žแ…ก
แ„†แ…ฉแ†ผแ„€แ…ฉแ„ƒแ…ตแ„‡แ…ตแ„€แ…ญแ„‹แ…ฒแ†จ1แ„‹แ…ตแ†ฏแ„Žแ…ก
ย 
Data-Oriented Design๊ณผ ์œ ๋‹ˆํ‹ฐ DOTS
Data-Oriented Design๊ณผ ์œ ๋‹ˆํ‹ฐ DOTSData-Oriented Design๊ณผ ์œ ๋‹ˆํ‹ฐ DOTS
Data-Oriented Design๊ณผ ์œ ๋‹ˆํ‹ฐ DOTS
ย 

Mais de sys4u

Html5_SYS4U
Html5_SYS4UHtml5_SYS4U
Html5_SYS4U
sys4u
ย 
Web Accessibility_SYS4U
Web Accessibility_SYS4UWeb Accessibility_SYS4U
Web Accessibility_SYS4U
sys4u
ย 
iOS Human Interface Guidlines #15_SYS4U
iOS Human Interface Guidlines #15_SYS4UiOS Human Interface Guidlines #15_SYS4U
iOS Human Interface Guidlines #15_SYS4U
sys4u
ย 
iOS Human Interface Guidlines #13_SYS4U
iOS Human Interface Guidlines #13_SYS4UiOS Human Interface Guidlines #13_SYS4U
iOS Human Interface Guidlines #13_SYS4U
sys4u
ย 
UX Layout Design_SYS4U
UX Layout Design_SYS4UUX Layout Design_SYS4U
UX Layout Design_SYS4U
sys4u
ย 
Advanced SWOT Analysis of e-commerce_SYS4U
Advanced SWOT Analysis of e-commerce_SYS4UAdvanced SWOT Analysis of e-commerce_SYS4U
Advanced SWOT Analysis of e-commerce_SYS4U
sys4u
ย 
Proxy_design_pattern_in_Java_SYS4U
Proxy_design_pattern_in_Java_SYS4UProxy_design_pattern_in_Java_SYS4U
Proxy_design_pattern_in_Java_SYS4U
sys4u
ย 
iOS Human_Interface_Guidlines_#1_SYS4U
iOS Human_Interface_Guidlines_#1_SYS4UiOS Human_Interface_Guidlines_#1_SYS4U
iOS Human_Interface_Guidlines_#1_SYS4U
sys4u
ย 
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&CUIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
sys4u
ย 
Promotions_2nd_SYS4U I&C
Promotions_2nd_SYS4U I&CPromotions_2nd_SYS4U I&C
Promotions_2nd_SYS4U I&C
sys4u
ย 

Mais de sys4u (10)

Html5_SYS4U
Html5_SYS4UHtml5_SYS4U
Html5_SYS4U
ย 
Web Accessibility_SYS4U
Web Accessibility_SYS4UWeb Accessibility_SYS4U
Web Accessibility_SYS4U
ย 
iOS Human Interface Guidlines #15_SYS4U
iOS Human Interface Guidlines #15_SYS4UiOS Human Interface Guidlines #15_SYS4U
iOS Human Interface Guidlines #15_SYS4U
ย 
iOS Human Interface Guidlines #13_SYS4U
iOS Human Interface Guidlines #13_SYS4UiOS Human Interface Guidlines #13_SYS4U
iOS Human Interface Guidlines #13_SYS4U
ย 
UX Layout Design_SYS4U
UX Layout Design_SYS4UUX Layout Design_SYS4U
UX Layout Design_SYS4U
ย 
Advanced SWOT Analysis of e-commerce_SYS4U
Advanced SWOT Analysis of e-commerce_SYS4UAdvanced SWOT Analysis of e-commerce_SYS4U
Advanced SWOT Analysis of e-commerce_SYS4U
ย 
Proxy_design_pattern_in_Java_SYS4U
Proxy_design_pattern_in_Java_SYS4UProxy_design_pattern_in_Java_SYS4U
Proxy_design_pattern_in_Java_SYS4U
ย 
iOS Human_Interface_Guidlines_#1_SYS4U
iOS Human_Interface_Guidlines_#1_SYS4UiOS Human_Interface_Guidlines_#1_SYS4U
iOS Human_Interface_Guidlines_#1_SYS4U
ย 
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&CUIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
ย 
Promotions_2nd_SYS4U I&C
Promotions_2nd_SYS4U I&CPromotions_2nd_SYS4U I&C
Promotions_2nd_SYS4U I&C
ย 

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
  • 20. ์ž…๋ ฅ๋น„์œจ์ด ๋‚ฎ์„์ˆ˜๋ก ์“ธ๋ฐ์—†์ด ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ปค์ง€๊ฒŒ ๋˜์–ด ๊ฒฐ๊ณผ์ ์œผ๋กœ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋” ์ปค์ง€๊ฒŒ ๋œ๋‹ค.
  • 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์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์  ์œผ๋กœ ์ด์šฉํ•˜๋„๋ก ๋ถ„์„ํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.