JavaRush /Java Blog /Random-KO /์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #132. JDK์˜ ์ตœ์‹  ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ์ธ ZGC๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Java์—์„œ HashM...

์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #132. JDK์˜ ์ตœ์‹  ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ์ธ ZGC๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Java์—์„œ HashMap, LinkedHashMap ๋ฐ TreeMap์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

JDK์˜ ์ตœ์‹  ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ์ธ ZGC ์†Œ๊ฐœ

์ถœ์ฒ˜: Java ๋‚ด๋ถ€ ZGC ๋˜๋Š” Z Garbage Collector๋Š” JDK์—์„œ ๊ฐ€์žฅ ํ˜„๋Œ€์ ์ธ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ์ž…๋‹ˆ๋‹ค. ์›๋ž˜๋Š” JDK 11์—์„œ ์‹คํ—˜์ ์ธ ๊ธฐ๋Šฅ์œผ๋กœ ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ZGC๋Š” JEP 377 ํ–ฅ์ƒ์ด ์Šน์ธ๋œ ํ›„ JDK 15์˜ ํ”„๋กœ๋•์…˜ ๊ธฐ๋Šฅ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ZGC์˜ ๋ชฉํ‘œ์™€ ๋ฏธ๋ž˜๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #132.  JDK์˜ ์ตœ์‹  ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ์ธ ZGC๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.  Java์˜ HashMap, LinkedHashMap ๋ฐ TreeMap์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ - 1

ZGC ๊ฒ€ํ† 

ZGC๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์งง์€ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ZGC ์ž‘์—… ์ค‘ ์ตœ๋Œ€ ์ผ์‹œ ์ค‘์ง€ ์‹œ๊ฐ„์€ ๊ฑฐ์˜ 250๋งˆ์ดํฌ๋กœ์ดˆ๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ, ์ •ํ™•ํžˆ ๋งˆ์ดํฌ๋กœ์ดˆ์ด๋ฉฐ ํ‰๊ท  ์ผ์‹œ ์ค‘์ง€ ์‹œ๊ฐ„์€ ์ˆ˜์‹ญ ๋งˆ์ดํฌ๋กœ์ดˆ์ž…๋‹ˆ๋‹ค. ZGC๋Š” ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚˜๋ฉฐ ์ตœ์†Œ ํž™ ํฌ๊ธฐ๋Š” 8MB์—์„œ 16TB๊นŒ์ง€์ž…๋‹ˆ๋‹ค. ์ผ์‹œ์ •์ง€ ์‹œ๊ฐ„์€ ํž™ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ฆ๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํž™ ํฌ๊ธฐ๊ฐ€ ์ˆ˜ ํ…Œ๋ผ๋ฐ”์ดํŠธ์— ๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์ผ์‹œ ์ค‘์ง€ ์‹œ๊ฐ„์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋งˆ์ดํฌ๋กœ์ดˆ ๋‹จ์œ„๋กœ ์ธก์ •๋ฉ๋‹ˆ๋‹ค. ZGC๋Š” ์งง์€ ๋Œ€๊ธฐ ์‹œ๊ฐ„๊ณผ ๋†’์€ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ์ฒ˜๋ฆฌ๋Ÿ‰ ๋น„์šฉ์€ G1์— ๋น„ํ•ด ์•ฝ 10% ๋‚ฎ์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ์ฒ˜๋ฆฌ๋Ÿ‰ ๊ฐ์†Œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋””์ž์ธ, ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

ZGC ์‚ฌ์šฉ

G1์€ JDK 9๋ถ€ํ„ฐ ๊ธฐ๋ณธ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ์ด๋ฏ€๋กœ ZGC๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด VM ํ”Œ๋ž˜๊ทธ -XX:+UseZGC๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ZGC๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ตฌ์„ฑ์€ ์ตœ๋Œ€ ํž™ ํฌ๊ธฐ์ธ -Xmx๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํž™ ํฌ๊ธฐ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ผ์ด๋ธŒ ์„ธํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ปค์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ ์˜ˆ์•ฝ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํž™์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์ด ๋งŽ์„์ˆ˜๋ก ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ๋นˆ๋„๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ๊ท ํ˜•์„ ์ด๋ฃจ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ZGC์˜ ์ถ”๊ฐ€ ๊ฐœ๋ฐœ

JDK 15์˜ ํ”„๋กœ๋•์…˜ ๊ธฐ๋Šฅ์œผ๋กœ ์ถœ์‹œ๋œ ์ดํ›„ ZGC๋Š” ๊ณ„์†ํ•ด์„œ ํ™œ๋ฐœํ•˜๊ฒŒ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. JDK 16์ด ์ถœ์‹œ๋˜๋ฉด์„œ ์Šค๋ ˆ๋“œ ์Šคํƒ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ(JEP 376)๊ฐ€ ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ JDK 18์—๋Š” ํ–‰ ์ค‘๋ณต ์ œ๊ฑฐ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ๋Š” ZGC๊ฐ€ ๋‹ค์„ธ๋Œ€ํ™”๋  ์˜ˆ์ •์ด์ง€๋งŒ, ์ด ๊ฐœ์„  ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์ฒด์ ์ธ ๊ธฐ๊ฐ„์€ ์•„์ง ์ •ํ•ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

ZDC์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด

Java์—์„œ HashMap, LinkedHashMap ๋ฐ TreeMap์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ถœ์ฒ˜: Rrtutors Java ํ”„๋กœ๊ทธ๋žจ์— ํ‚ค-๊ฐ’ ์Œ์„ ์ €์žฅํ•˜๋ ค๋Š” ๊ฒฝ์šฐ Java ์ปฌ๋ ‰์…˜์€ ํ•„์š”์— ๋”ฐ๋ผ ์ด์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” LinkedHashmap , HashMap ๋ฐ TreeMap์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค . ์ด ์„ธ ํด๋ž˜์Šค์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ ๋‚ด๋ถ€ ๊ตฌํ˜„๊ณผ ํŠน์ • ๊ฒฝ์šฐ์˜ ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #132.  JDK์˜ ์ตœ์‹  ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ์ธ ZGC๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.  Java์˜ HashMap, LinkedHashMap ๋ฐ TreeMap์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ - 2

Java์—์„œ HashMap, LinkedHashMap ๋ฐ TreeMap์˜ ์ฐจ์ด์ 

๊ตฌํ˜„, ์ˆœ์„œ, ์ •๋ ฌ, Null ํ‚ค ๋ฐ ๊ฐ’ ์ง€์›์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์–ธ๊ธ‰๋œ ์„ธ ๊ฐ€์ง€ ํด๋ž˜์Šค ๊ฐ„์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„

HashMap ๊ณผ LinkedHashMap์€ ๋ชจ๋‘ Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ˜๋ฉด TreeMap์€ Map , NavigableMap ๋ฐ vSortedMap ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค . LinkedHashMap์€ ์ด์ค‘ ์—ฐ๊ฒฐ ๋ชฉ๋ก ๋ฒ„ํ‚ท์œผ๋กœ ๊ตฌํ˜„๋˜๊ณ , HashMap์€ ํ•ด์‹œ ํ…Œ์ด๋ธ”๋กœ ๊ตฌํ˜„๋˜๋ฉฐ, TreeMap ์€ ํŠธ๋ฆฌ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

์ฃผ๋ฌธ ๋ฐ ์ •๋ ฌ

  • HashMap์€ ๋ฐ˜๋ณต ์ˆœ์„œ์— ๊ด€ํ•ด ์–ด๋– ํ•œ ๋ณด์žฅ๋„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒˆ๋กœ์šด ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ์™„์ „ํžˆ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • LinkedHashMap์€ ํ•ญ๋ชฉ์ด ๋งต์— ๋ฐฐ์น˜๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค.

  • TreeMap์€ CompareTo() ๋ฉ”์„œ๋“œ (๋˜๋Š” ์™ธ๋ถ€ Comparator) ์— ๋”ฐ๋ผ ํ‚ค์˜ "์ž์—ฐ ์ˆœ์„œ"์— ๋”ฐ๋ผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค . ๋˜ํ•œ ์ •๋ ฌ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ํฌํ•จ๋œ SortedMap ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

Null ํ‚ค ๋ฐ ๊ฐ’

HashMaps ์™€ LinkedHashMap์€ ํ‚ค ๊ฐ’๋ฟ๋งŒ ์•„๋‹ˆ๋ผ null ๊ฐ’๋„ ์ง€์›ํ•˜๋Š” ๋ฐ˜๋ฉด, TreeMaps๋Š” ์ž์—ฐ ์š”์†Œ ์œ ํ˜•์„ ์ง€์›ํ•˜๋ฏ€๋กœ null ๊ฐ’์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ์  ์˜ˆ์‹œ๋ฅผ ์œ„ํ•ด HashMap , LinkedHashMap ๋ฐ TreeMap ์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค .
import java.util.HashMap;

import java.util.LinkedHashMap;

import java.util.Map;

import java.util.TreeMap;

public class HashMap_LinkedHashMap_TreeMap {

            public static void main(String[] args) {

                  Map Treemapu = new TreeMap();

                  Treemapu.put("First", "Java");

                  Treemapu.put("Second", "Python");

                  System.out.println("TreeMap values are: \n" + Treemapu);

                  Map Hashimapu = new HashMap();

                  Hashimapu.put("First", "Java");

                  Hashimapu.put("Second", "Python");

                  System.out.println("HashMap Values are: \n" + Hashimapu);

                  Map LinkedHashiMapu = new LinkedHashMap();

                  LinkedHashiMapu.put("First", "Java");

                  LinkedHashiMapu.put("Second", "Python");

                  System.out.println("LinkedHashMap values are: \n" + LinkedHashiMapu);

            }

}
์ถœ๋ ฅ์—์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์„ ์–ป์Šต๋‹ˆ๋‹ค:
{First=Java, Second=Python} HashMap ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: {Second=Python, First=Java} LinkedHashMap ๊ฐ’์€: {First=Java, Second=Python}
๋”ฐ๋ผ์„œ ์„ธ ํด๋ž˜์Šค ๋ชจ๋‘ ๊ณ ์œ  ํ‚ค์—์„œ ๊ฐ’์œผ๋กœ์˜ ๋งคํ•‘์„ ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค .
  • HashMap์€ ํ‚ค ํ•ด์‹ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋งต์ž…๋‹ˆ๋‹ค. O(1) ๊ฐ€์ ธ์˜ค๊ธฐ/๋„ฃ๊ธฐ ์ž‘์—…์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํ‚ค์—๋Š” ์ผ๊ด€๋œ hashCode() ๋ฐ equals() ๊ตฌํ˜„์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค .

  • LinkedHashMap์€ HashMap ๊ณผ ๋งค์šฐ ์œ ์‚ฌ ํ•˜์ง€๋งŒ ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€(๋˜๋Š” ์•ก์„ธ์Šค)๋˜๋Š” ์ˆœ์„œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋ฐ˜๋ณต ์ˆœ์„œ๋Š” ๋ฐฐ์น˜ ์ˆœ์„œ(๋˜๋Š” ๋””์ž์ธ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ์•ก์„ธ์Šค ์ˆœ์„œ)์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

  • TreeMap ์€ ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜ ๋งคํ•‘์ž…๋‹ˆ๋‹ค. ๋„ฃ๊ธฐ/๊ฐ€์ ธ์˜ค๊ธฐ ์ž‘์—…์—๋Š” O(log n) ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์š”์†Œ์— ๋น„๊ต ๋˜๋Š” ๋น„๊ต๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ผ์ข…์˜ ๋น„๊ต ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ์ˆœ์„œ๋Š” ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION