Study

[Java] ๋ณ€์ˆ˜์™€ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ ์ €์žฅ

์„œ์ฑ„๋ฆฌ 2024. 2. 17. 14:53

๐ŸŒฑ ์ง€์—ญ / ๋งค๊ฐœ๋ณ€์ˆ˜ ์œ„์น˜

๐Ÿซง ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• (์ •์ˆ˜, ์†Œ์ˆ˜, boolean)

public class Test {
    public static void main(String[] args) {
    	// ์ง€์—ญ๋ณ€์ˆ˜
        int intValue = 10;
        double doubleValue = 3.14;
        char charValue = 'A';
        boolean booleanValue = true;
        
        // ๋งค๊ฐœ๋ณ€์ˆ˜
        public static void printInt(int number) {
       	    System.out.println("Received int value: " + number);
    	}
    }
}

๋ฉ”์„œ๋“œ ๋‚ด์— ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์ „๋‹ฌ๋œ ์ง€์—ญ/๋งค๊ฐœ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ ๊ฐ’์ด ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์ผ ๊ฒฝ์šฐ stack์— ์ €์žฅ๋˜๊ณ  ๋ฉ”์„œ๋“œ ์ข…๋ฃŒ ์‹œ ์†Œ๋ฉธ๋œ๋‹ค.

 

๐Ÿซง ์ฐธ์กฐ ์ž๋ฃŒํ˜• (๋ฐฐ์—ด, ํด๋ž˜์Šค, ๊ฐ์ฒด ๋“ฑ new ์—ฐ์‚ฐ์ž๋กœ ์ƒ์„ฑ)

public class Test {
    public static void main(String[] args) {
    	// ์ง€์—ญ๋ณ€์ˆ˜
        String stringValue = "Hello, world!";
        StringBuilder stringBuilder = new StringBuilder("StringBuilder example");
        int[] array = {1, 2, 3, 4, 5};
        
        // ๋งค๊ฐœ๋ณ€์ˆ˜
        public static void printString(String str) {
            System.out.println("Received string value: " + str);
    	}
    }
}

๋ฉ”์„œ๋“œ ๋‚ด์— ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์ „๋‹ฌ๋œ ๋ณ€์ˆ˜์— ์ฐธ์กฐ์ž๋ฃŒํ˜•์ด ํ• ๋‹น๋  ๊ฒฝ์šฐ ์‹ค์ œ ๊ฐ์ฒด๋Š” heap์— ์ €์žฅ๋˜๊ณ  heap์— ์ €์žฅ๋œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ๊ฐ€ stack์— ์ €์žฅ๋œ๋‹ค. ๋ฉ”์„œ๋“œ ์ข…๋ฃŒ ์‹œ ๊ฐ์ฒด์— ์ƒ์„ฑ๋˜์—ˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ–ฅํ•œ heap ์ฃผ์†Œ ์ฐธ์กฐ๊ฐ€ ์‚ญ์ œ๋˜๊ณ  heap์— ๋‚จ์•„์žˆ๋˜ ์—ฐ๊ฒฐ์ด ๋Š๊ธด ๊ฐ์ฒด๋ฅผ GC๊ฐ€ ์ •๋ฆฌํ•œ๋‹ค.

 

๐ŸŒฑ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์œ„์น˜

๐Ÿซง ๊ธฐ๋ณธ / ์ฐธ์กฐ ์ž๋ฃŒํ˜•

public class Test {
    // ์ธ์Šคํ„ด์Šค ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•
    int instancePrim = 100;
    
    // ์ธ์Šคํ„ด์Šค ์ฐธ์กฐ ์ž๋ฃŒํ˜•
    String instanceRefer = new String("Variable");
}

์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š” ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์˜ ๋ถ€๋ถ„์ด๋ฏ€๋กœ ์ฐธ์กฐ ์ž๋ฃŒํ˜•(๊ฐ์ฒด) ๋‚ด์— ํฌํ•จ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ”์„œ๋“œ ๋ฐ”๊นฅ์— ์„ ์–ธ๋œ static ํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์˜ ๊ฐ’๋“ค์€ ๋ชจ๋‘ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ๋”ฐ๋ผ heap์— ์ €์žฅ๋˜๊ณ  ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ˜ธ์ถœํ•˜๋Š” ์ฐธ์กฐ๋Š” stack์— ์ €์žฅ๋œ๋‹ค. ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š” ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋  ๋•Œ๊นŒ์ง€ heap์— ์œ„์น˜ํ•˜๋ฉฐ GC์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค.

 

๐ŸŒฑ ํด๋ž˜์Šค ๋ณ€์ˆ˜ ์œ„์น˜

๐Ÿซง ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•

public class Test {
    static int classPrim = 10;
}

ํด๋ž˜์Šค ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์„ ํ• ๋‹นํ•˜๋ฉด runtime constant pool์— ํด๋ž˜์Šค ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๊ณ  ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ ๊ฐ’์€ numeric constant value๋กœ ์ €์žฅ๋œ๋‹ค.

 

๐Ÿซง ์ฐธ์กฐ ์ž๋ฃŒํ˜• (๊ฐ์ฒด, ๋ฐฐ์—ด ๋“ฑ)

public class Test {
    static String classRefer = new String("Variable");
}

๊ธฐ๋ณธ ์ž๋ฃŒํ˜•๊ณผ ์ŠคํŠธ๋ง์„ ์ œ์™ธํ•œ ์ฐธ์กฐ ์ž๋ฃŒํ˜•์ธ ๊ฒฝ์šฐ ํด๋ž˜์Šค ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ ๊ฐ์ฒด๋Š” heap์— ์ƒ์„ฑ๋˜๊ณ  ์ฐธ์กฐ๋ฅผ runtime constant pool์— ์ €์žฅํ•œ๋‹ค.

 

๐ŸŒฑ String Literal

public class Test {
    static String classLiter = "Variable";
    
    String instanceLiter = "Variable";
    
    public void methodTest(int paramPrim, String paramRefer) {
        String innerLiter = "Variable";
    }
}

new ์—ฐ์‚ฐ์ž๋กœ ์ƒ์„ฑํ•˜๋Š” ์ฐธ์กฐ ์ž๋ฃŒํ˜•๊ณผ ๋‹ฌ๋ฆฌ String์€ Literal ํ˜•ํƒœ๋กœ ๋ณ€์ˆ˜์— ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.(ex. String buf = "buf";)

Java์˜ ๊ฐœ๋ฐœ์ง„๋“ค์ด String ๊ฐ์ฒด๋Š” ์ž์ฃผ ์žฌ์‚ฌ์šฉ๋ ๊ฒƒ์ด๋ผ ํŒ๋‹จํ•˜์—ฌ String ๊ฐ์ฒด๋Š” ์ฐธ์กฐ ์ž๋ฃŒํ˜•์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  heap๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ runtime constant pool์˜ string constant value์— ์ €์žฅ๋œ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ๊ฐ์ฒด ๋ณ€์ˆ˜ ํ˜น์€ ํด๋ž˜์Šค ๋ณ€์ˆ˜๋กœ ๋™์ผํ•œ literal string ์ด๋ฉด ๋™์ผํ•œ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. (์ด๋Š” "==" ์—ฐ์‚ฐ์œผ๋กœ ํ™•์ธ ๊ฐ€๋Šฅ)

 

 

๐Ÿค“ ์š”์•ฝ

โญ๏ธ Java 7

Perm Gen์ด ์กด์žฌํ–ˆ์„ ๋• ๋ณ€์ˆ˜์˜ ์œ„์น˜์™€ ํ• ๋‹น๋œ ๊ฐ’์ด ์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋ฐฐ์น˜๋  ๊ฒƒ์ด๋‹ค.

 

โญ๏ธ Java 8

Java 8์—์„œ๋Š” Perm Gen์ด ์‚ญ์ œ๋˜๊ณ  Metaspace๋กœ ๋Œ€์ฒด๋˜๋ฉด์„œ Metaspace๋Š” ํด๋ž˜์Šค ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋งŒ ๊ด€๋ฆฌํ•˜๊ณ  ํด๋ž˜์Šค ๋ณ€์ˆ˜์˜ ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’์„ ์ €์žฅํ•˜๋˜ runtime constant pool์˜ numeric constants์™€ string constants๊ฐ€ heap ์˜์—ญ์œผ๋กœ ์ด๊ด€๋˜์–ด GC ๋Œ€์ƒ์œผ๋กœ ์ ์šฉ๋˜์—ˆ๋‹ค.

 

 

https://8iggy.tistory.com/230