Java의 메모리 할당: 2022년에 알아야 할 모든 것

게시 됨: 2021-01-10

자바에서 메모리 할당 은 컴퓨터 프로그램과 서비스가 가상 메모리 공간 전용으로 할당되는 프로세스를 의미합니다. 자바 가상 머신은 메모리를 스택과 힙 메모리로 나눕니다. Java Virtual Machine의 경우 스택 및 힙 메모리에서 최대 잠재력으로 애플리케이션을 실행할 수 있습니다. 새로운 변수나 객체가 선언될 때마다 메모리는 이러한 작업 전용 메모리를 할당합니다.

목차

스택 메모리

Java 의 Stock 메모리 할당 은 정적 메모리 및 스레드 실행에 사용됩니다. 이 메모리에 포함된 값은 임시이며 후입선출 방식으로 계속 참조되기 때문에 특정 방법으로 제한됩니다.

메모리가 호출되고 스택 메모리에 새 블록이 생성되자마자 스택 메모리는 메서드가 지속될 때까지 기본 값과 참조를 보유합니다. 종료 후 블록이 플러시되고 새 프로세스가 발생하는 데 사용할 수 있습니다. 일반적으로 스택 메모리의 전체 크기는 힙 메모리의 크기에 비해 크지 않습니다.

Swiggy, Quora, IMDB 등과 같은 애플리케이션을 빌드하는 방법을 배우십시오.

스택 메모리의 특성

JVM( Java Virtual Machine) 메모리 할당 의 여러 섹션을 기반으로 스택 메모리의 개별 기능 중 일부는 다음과 같습니다.

  • 스택 메모리는 새로운 메서드가 호출되고 그에 따라 반환됨에 따라 커지거나 줄어들 수 있습니다.
  • 스택의 모든 변수는 메서드 범위가 존재하는 한 실행할 수 있습니다.
  • 메소드가 실행될 때 자동 할당 및 할당 해제를 가져옵니다.
  • 전체 메모리의 경우 java.lang.StackOverFlowError가 시작됩니다.
  • 힙 메모리에 비해 접근이 빠릅니다.

읽기: 전체 스택 대 소프트웨어 엔지니어: 어느 것을 선택해야 합니까?

자바 에서 스택 메모리 할당에 사용되는 메소드

  • Object push(Object element): 여기에서 항목이 스택의 맨 위로 푸시됩니다.
  • Object pop(): 스택의 맨 위에 있는 모든 요소는 플러시되고 반환됩니다. pop()이 호출되어 스택이 비어 있는 경우 예외 – EmptyStackException이 발생합니다.
  • Object peek(): 여기에서 최상위 요소가 반환되지만 플러시되지는 않습니다.
  • Boolean empty(): 루프의 스택에 최상위 값이 없으면 함수는 1(true)을 반환하고, 그렇지 않으면 0(false)을 반환합니다.
  • In search(Object 요소): 스택에 개체가 있는지 이해하는 데 사용됩니다. 값이 발견되면 함수는 스택의 맨 위에서 요소의 위치를 ​​반환하고, 그렇지 않으면 -1을 반환합니다.

읽기: 초보자를 위한 Java 프로젝트 및 주제

Java 힙 공간

Java 런타임에서 주로 사용하는 Java Heap Space는 개체가 생성되고 할당될 때마다 실행됩니다. Garbage Collection과 같은 이산 함수는 참조를 보유하지 않는 이전 객체가 사용한 메모리를 계속 플러시합니다. 힙 공간에서 생성된 객체의 경우 애플리케이션 전반에 걸쳐 자유롭게 액세스할 수 있습니다.

Java 메모리 할당은 힙, 스택, 코드 및 정적 부분으로 나뉩니다.

자바 힙 메모리의 특징

  • Young Generation, Old or Tenured Generation, Permanent Generation을 포함한 복잡한 메모리 관리 기술에서 접근 가능.
  • 힙 메모리에서는 가득 차면 java.lang.OutOfMemoryError를 반환합니다.
  • 이 메모리의 액세스는 스택 메모리의 액세스보다 상대적으로 느립니다.
  • 자동 할당 해제를 거치지 않으며 메모리가 최적의 단계에서 작동하도록 이물질을 제거하기 위해 Garbage Collector와 같은 유사한 기능이 필요합니다.

Java에서 스택 및 힙 메모리 할당 의 예는 다음과 같습니다.

원천

힙 공간과 스택 메모리: 근본적인 차이점

힙 공간 메모리 스택 메모리
애플리케이션의 모든 부분은 힙 메모리를 호출합니다. 스택 메모리 실행은 단일 스레드로 제한됩니다.
객체가 생성될 때마다 힙 공간에 저장됩니다. 스택 메모리는 참조 및 로컬 기본 변수로만 구성됩니다.
여기의 개체는 애플리케이션 전체에서 전역적으로 액세스할 수 있습니다. 다른 스레드는 스택 메모리 개체에 액세스할 수 없습니다.
여기서 기억은 젊은 세대와 기성세대에 따라 정의된다. 메모리 관리는 후입선출 방식으로 발생합니다.
메모리는 응용 프로그램의 범위에 따라 유지됩니다. 기억은 일시적입니다.
– XMX 및 XMS JVM과 같은 방법을 사용하여 최적의 힙 메모리 크기를 정의합니다. 스택 메모리의 경우 -XSS 메서드에 의해 결정됩니다.
여기서 java.lang.OutOfMemoryError 예외는 메모리가 가득 찬 경우에 발생한다. 여기서 java.lang.StackOverFlowError 오류 는 메모리가 가득 차면 발생합니다.
스택 메모리에 비해 크기는 더 크지만 처리하는 데 시간이 걸립니다. 크기는 작지만 원활한 LIFO 작동을 위해 실행 속도가 빠릅니다.

또한 읽기: 인도의 Java 개발자 급여

세계 최고의 대학에서 온라인으로 소프트웨어 과정을 배우십시오 . 이그 제 큐 티브 PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 획득하여 경력을 빠르게 추적하십시오.

결론

Java에서 메모리 할당은 주로 스택 및 힙 공간의 두 가지 방식으로 발생합니다. 모든 과정을 이해하는 데 도움이 되었기를 바랍니다.

전체 스택 소프트웨어 개발에 대해 자세히 알아보려면 upGrad & IIIT-B의 전체 스택 소프트웨어 개발 이그 제 큐 티브 PG 프로그램을 확인하십시오. 이 프로그램은 작업 전문가를 위해 설계되었으며 500 시간 이상의 엄격한 교육, 9 개 이상의 프로젝트, 및 과제, IIIT-B 동문 자격, 실질적인 실습 캡스톤 프로젝트 및 최고의 기업과의 취업 지원.

Java에서 메모리 관리는 어떻게 발생합니까?

JVM(Java Virtual Machine)은 Java 프로그래밍 언어로 작성된 프로그램을 실행하는 데 사용되는 컴퓨터 프로그램입니다. 메모리 관리를 효율적으로 사용하는 프로세스를 만듭니다. 또한 운영 체제에 크래시가 발생하더라도 JVM에서 실행 중인 프로그램에 영향을 미치지 않도록 견고하게 설계되었습니다. 메모리 관리는 컴퓨터 시스템의 모든 메모리(RAM)를 관리하는 것을 의미합니다. JVM은 필요할 때 메모리 할당 및 해제를 모니터링합니다. 프로그램이 메모리에 로드되자마자 JVM은 메모리 공간을 할당합니다. 이 프로세스를 힙이라고 합니다. 힙은 애플리케이션의 많은 부분에 대한 공통 메모리 공간입니다.

Java에서 가비지 컬렉션이란 무엇입니까?

JVM(Java Virtual Machine)은 참조 카운팅을 사용하여 Java 개체 수를 추적합니다. 개체를 수집하려면 먼저 이 개체에 대한 참조 수가 0에 도달해야 합니다. 사용자 프로그램은 finalize() 메서드를 호출하여 개체를 명시적으로 삭제할 수 있습니다. Finalize는 GC(가비지 수집기)에서 호출하는 Object 클래스의 정적 메서드입니다. Finalize 메서드는 Garbage Collector가 이 개체를 처리하기 전에 개체의 모든 리소스를 해제합니다. Garbage Collector는 원치 않는 개체를 청소하는 프로세스입니다. Java 런타임 시스템이 Java 힙이 거의 가득 찼음을 감지하면 Garbage Collector 프로세스가 트리거됩니다. 모든 객체에는 JVM의 비트맵이 있습니다. 비트맵은 사용 여부를 추적하기 위해 각 개체에 대해 설정됩니다. 비트맵이 0으로 바뀌면 GC가 이 개체를 처리합니다.

Java 프로그래밍 언어의 기능은 무엇입니까?

Java 프로그래밍 언어는 응용 프로그램 및 애플릿을 빌드하는 데 사용되는 범용 고급 프로그래밍 언어입니다. Java 소프트웨어는 재프로그래밍 없이 Java를 지원하는 모든 플랫폼에서 실행할 수 있습니다. Java 프로그래밍 언어의 기능은 다음과 같습니다. 객체 지향 기능, 강력함, 높은 보안 및 플랫폼 독립적, 무료, 배우고 사용하기 쉽습니다. Java는 플랫폼에 독립적이며 모든 OS 또는 플랫폼에서 사용할 수 있는 객체 지향 프로그래밍 언어입니다. Java는 컴파일된 언어이며 바이트 코드가 생성되어 Java Virtual Machine에서 실행됩니다.