자바 메모리 : 힙 공간 및 가비지 콜렉터

자바 힙 공간과 가비지 컬렉션을 통해 메모리를 관리하는 방법에 대해 알아 봅니다. 메모리 할당을 이해하는 것은 자바 프로그램에서 메모리 누수를 방지 할 수 있습니다.

A+ A-

최근에, 나는 실행할 때 꽤 필요로하는 Java 응용 프로그램 작성 메모리를 하고 난에서 OutOfMemory 오류가 발생하기 시작했다 :

 오류 : java.lang.OutOfMemoryError와 : Java 힙 공간 

우리는 메모리를 많이 소비하는 프로그램을 실행해야하는 경우가 종종 발생합니다. 다음은 이러한 문제를 해결하기위한 몇 가지 방법이 있습니다.

Java 힙 공간은 무엇인가?

우선, 힙 공간이 무엇인지 이해 할 수 있습니다. 음, 자바는 주로의 배열에 메모리를 사용하여 스택 . 자바 (A)로부터 전달 된 파라미터를 유지 착신 메소드 호출 방법 (즉, 파라미터는 필요에 따라 스택에서 팝에 밀려된다) 적층 구조의 형태를. 한편, 힙은 자바 만들고 개체를 유지하는 랜덤 액세스 메모리 공간입니다. 이 객체를 포함 할 충분한 공간이 발견 된 곳 자바는이 힙 공간 내에서 객체를 생성합니다. 새 개체를 만들 때, (예를 들어, 새로운 문자열 () ;) 객체는 힙 공간에 작성하고에 들어갈 수있는 메모리를 차지됩니다. 가비지 수집 동안, 자바는 더 이상 참조되지 해당 개체의 힙 공간을 확보. 참조의 수 (즉, "필요") 개체 증가에 유지하고 우리가 그들을 복종하지 않으면 그러나 -THE JVM 힙 공간이 부족.

클래스는 요구되는 메모리의 양은 데이터 부재의 수와 유형에 의존한다.

  1. 클래스 자체는 8 바이트의 최소 필요
  2. 모든 데이터 멤버는 4 바이트 (긴 두 번이 8 바이트 필요)가 필요합니다. 심지어 부울 변수에만 저장하려면 하나의 비트를 필요로하지만 4 바이트를 사용합니다.
  3. 사용 된 메모리의 양이 8 바이트의 덩어리로 성장
자바 프로그램을 최적화

이 문제를 해결 얻을 수있는 첫 번째 단계는 프로그램을 통해 이동하고 적은 메모리를 사용할 수 있도록하기 위해이 수정 될 수 있는지 확인해야합니다. 긴 있기 때문에 메모리의 비용은 1960 년대 무엇에 비해 매우 낮은했다. 그리고 프로그래머는 프로그램 메모리 수당의 측면에서 매우 사치스러운되고있다. 그러나 여전히, 더 자주 못하는 것보다, 우리가 사용할 수보다 더 많은 메모리를 필요로하는 프로그램을 작성해야합니다. 이 프로그램 충돌의 가능성을 줄일뿐만 아니라, 때때로 실행 속도를 향상뿐만 아니라 때문에 메모리 사용의 맥락에서 절약은 항상 좋은 것입니다.

더 이상 코드에서 필요한 경우 당신은 널 (null)로 개체를 설정 없습니다. 당신이 개체 (들)을 생성하지만, 그들은이 필요하지 않을 때이를 폐기하지 않는 한 루프를 실행하는 경우이 더욱 중요하다.

자바 가비지 컬렉터 방법을 사용합니다

메모리 사용을 최적화 향해 두 번째 단계는 명시 가비지 컬렉션 방법을 호출 할 수있다. 자바는 자동으로 필요하며이 메소드를 호출하고 더 이상 참조하는 개체가 포함 된 메모리 공간을 해제합니다. 그러나 당신은 또한 코드에서 명시 적으로이 메소드를 호출 할 수 있습니다 (예를 들어, 달성 "큰 작업"및 다음 "큰 작업"후 시작됩니다). 가비지 컬렉터에게 전화를 걸 때 사용 :

 Runtime.getRuntime () GC ().; 

하기 전 및 GC () 메소드를 호출 한 후에 메모리의 상태를 모니터링 할 수있다.

 에서 System.out.println ( "nnCalling 쓰레기 Collectornn");
에서 System.out.println ( "무료 메모리 전 :"+ Runtime.getRuntime () freeMemory에서 ().);
Runtime.getRuntime () GC ().;
에서 System.out.println ( "AFTER 무료 메모리 :". + Runtime.getRuntime () freeMemory에서 ());
System.out.println에 ( "nnGarbage 수집 finishednn"); 

freeMemory에서 () 메소드는 바이트 단위로 측정 가능한 메모리의 양을 사용할 수 반환합니다. 런타임 클래스가 제공하는 다른 방법을 참조 자바 API를

JVM에 더 많은 메모리를 보내기

메모리 사용을 최적화에도 불구을위한 노력, 때로는 JVM은 참으로 더 많은 메모리를 필요로 않습니다. 이 경우에 우리는 메모리의 특정 량을 사용하여 명령 라인을 통해 JVM 말할 수있다 :

 자바 -Xms2000m -Xmx3500m 

-Xms와 -Xmx는 JVM이 컴퓨터에서 사용할 수있는 스왑 공간 (가상 메모리)의 양을 지정 전환합니다.

메모리의 -Xms가 최소를 지정합니다 (즉, 초기) 양

-Xmx는 JVM이 사용할 수있는 메모리의 최대 크기를 지정합니다.

이 메모리 값은 메가 바이트로 지정해야합니다.

자바 힙 공간 및 가비지 수집 메커니즘을 통해 메모리를 관리에 대한 그래서,이이었다. 다음은 현명한 선택이며, 모든 자바 프로그래머는 자바 메모리를 처리하는 방법의 명확한 이해가 있어야합니다. 당신 만이 효율적으로 메모리를 많이 프로그램에서 작동 할 수 있습니다.

Ads

충적세

당신이 리눅스 연인이 있다면 최고의 우분투 대안 찾아요

의 뭔가 익숙해 보겠습니다; 기본적이지만 조금 오프 트랙! 혹시 리눅스와 우분투 용어와 혼동있어 적이 있습...

Gmail의받은 편지함에 서명을 추가하는 방법 - Gmail에서 구글 서명 추가

Google의받은 편지함 구글은 지난 몇 년에 출시했던 최고의 물건 중 하나였다. 그것은 통합받은 편지함에...

주간 기술 뉴스 : 노키아, 구글, 닌텐도

안녕하십니까, 그것은 금요일, 3 월 3 일이고 단지 언제나처럼 우리는 다시 우리의 주간 뉴스 검거에있어....

초보자를위한 라즈베리 파이 프로젝트 - 당신은 라즈베리 파이로 수행 할 수있는

라즈베리 파이는 낮은 전력의 라즈베리 파이 재단이 만든 싱글 보드 컴퓨터 시리즈입니다. 원래는 개발 도상국...

안드로이드 2017 모범 VPN - 안드로이드에 VPN을 사용하는 방법

사라는 VPN을이 기술에 savvies 해커 만 있었다 일입니다! 그리고, 우리는이 서비스에 대해 강의 충...

코멘트