Java에서의 메모리 할당은 Java 프로그램이나 서비스에 스토리지를 할당하는 과정으로 정의할 수 있습니다. Java에서 메모리 할당은 JVM(Java Virtual Machine) 메모리에서 수행되며 크게 힙 메모리와 비힙 메모리로 구분됩니다. 이 글에서는 힙 메모리와 비힙 메모리에 해당하는 스택 메모리가 Java 프로그램에 어떻게 할당되는지 자세히 설명합니다.
광고 이 카테고리에서 인기 있는 강좌 JAVA MASTERY - 전문 분야 | 78 코스 시리즈 | 15가지 모의고사아시다시피 Java는 객체 지향 언어입니다. 따라서 Java에서 생성된 모든 객체는 JVM(Java Virtual Machine)에 저장됩니다. JVM 메모리는 다음과 같은 부분으로 나뉩니다.
Java 런타임은 Java 프로그램을 실행하는 동안 힙 메모리를 사용하여 객체와 클래스에 메모리를 할당합니다. Java에서 객체가 생성될 때마다 힙 메모리에 저장됩니다. 또한 불필요한 공간을 확보하기 위해 가비지 수집 프로세스가 힙 메모리에서 실행됩니다. 가비지 수집은 참조가 없는 힙 영역에서 해당 개체를 제거합니다. Java의 힙 메모리는 다음과 같은 부분으로 나뉩니다.
다음은 Java 힙 메모리와 관련된 몇 가지 중요한 사항입니다.
이름에서 알 수 있듯이 스택 메모리는 LIFO(후입 선출) 원칙을 기반으로 합니다. 스택 메모리는 정적 메모리 할당에 사용되며 Java 프로그램의 각 실행 스레드에는 스택 메모리가 있습니다. Java 메소드가 호출될 때마다 Java 스택 메모리에 새 블록이 생성되어 로컬 또는 중간 변수와 메소드의 다른 객체에 대한 참조를 보유합니다. 메서드 실행이 완료되자마자 스택의 메모리 블록은 비워지고 다음 메서드에서 사용됩니다. 따라서 스택 메모리 크기는 힙 메모리보다 작습니다. 스택 메모리의 중요한 기능은 다음과 같습니다.
다음은 Java의 스택 메모리와 힙 메모리를 간략히 비교한 것입니다.
Heap Memory | Stack Memory |
The entire application uses heap memory during its runtime. | The application in parts uses stack memory. That means it is used one at a time during thread execution. |
Heap memory is larger than stack memory. | Stack memory is small as compared to heap memory. |
All objects created during the application are stored in heap memory. | Stack memory only stores local variables and references to objects. |
Access to heap memory is slow. | Access to stack memory is fast as compared to heap memory. |
Heap memory is allocated by creating new objects and gets deallocated by a garbage collector. | Stack memory is automatically allocated and deallocated with the end in method execution. |
Heap memory stays as long as the application is running. | Stack memory stays only until a method is executing. |
이제 메모리 할당 방법을 보여주는 Java 예제를 살펴보겠습니다
코드:
package com.edubca.javademo; class StudentData{ int rollNumber; String name; public StudentData(int rollNumber, String name) { super(); this.rollNumber = rollNumber; this.name = name; } public int getRollNumber() { return rollNumber; } public void setRollNumber(int rollNumber) { this.rollNumber = rollNumber; } public String getName() { return name; } public void setName(String name) { this.name = name; } } public class Main { public static void main(String[] args) { int id = 11; String name = "Yash"; StudentData s = null; s = new StudentData(id, name); System.out.println("Student Id is " + s.getRollNumber()); System.out.println("Student Name is " + s.getName()); } }
출력:
이제 위 프로그램에서 메모리가 어떻게 할당되는지 살펴보겠습니다.
1. Main 클래스에 메인 메소드 진입 후 id, 이름이 지역 변수이므로 스택 메모리에 다음과 같은 공간이 생성됩니다.
2. StudentData 클래스 생성자 호출이 스택 메모리 상단에 추가됩니다. 결과적으로 다음이 저장됩니다:
3. StudentData 클래스에 선언된 두 개의 인스턴스 변수는 힙 메모리에 저장됩니다.
위 내용은 Java의 메모리 할당의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!