๐ฑ ์ง์ญ / ๋งค๊ฐ๋ณ์ ์์น
๐ซง ๊ธฐ๋ณธ ์๋ฃํ (์ ์, ์์, 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 ๋์์ผ๋ก ์ ์ฉ๋์๋ค.
'Study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์คํ์์ค] Spring Boot ํ๋ก์ ํธ ์ปจํธ๋ฆฌ๋ทฐํฐ ๋๊ธฐ (0) | 2024.04.29 |
---|---|
[Java] Method Area๋ Heap ์์ญ์ด ์๋๋ค! (1) | 2024.02.19 |
[Java] ์๋ฐ ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ(Runtime Data Area) (0) | 2024.02.19 |
[DB] ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค(Isolation Level)์ด๋? (0) | 2024.02.16 |
[Java] ๊ฐ์ฒด๋น๊ต ์ equals()์ hashcode() ๋ ๋ค ์ฌ์ ์ํด์ผ ํ๋ ์ด์ (0) | 2024.02.13 |