>  기사  >  Java  >  Java 프로그래밍 아이디어: 참조를 사용하여 객체를 작동하고 프로그램이 실행될 때 메모리가 할당되는 방법

Java 프로그래밍 아이디어: 참조를 사용하여 객체를 작동하고 프로그램이 실행될 때 메모리가 할당되는 방법

php是最好的语言
php是最好的语言원래의
2018-08-03 14:56:091311검색

앞에 작성

우선 제가 하고 싶은 말은 Java 프로그래밍 사고 - 지식 카드라는 글이 될 것입니다. 기사의 내용은 제가 "Java 프로그래밍 사고"라는 책을 읽은 경험을 바탕으로 작성되었습니다. , 그렇다면 왜 이 기사 시리즈를 쓰고 싶습니까? 여러 가지 이유가 있습니다:

  • Java를 다시 시작합니다. 작업 프로젝트의 특수성으로 인해 저는 1년 넘게 Java 언어를 사용하지 않았습니다.

  • 저는 여가 시간을 활용하여 도움이 필요한 사람들을 돕는 글을 쓰고 싶습니다.

  • 책 전체의 지식을 조각조각 나누고 조각난 시간을 최대한 활용하세요.

일반적인 상황에서 최신 기사는 내 WeChat 공개 계정인 Java 프로그래밍 커뮤니티에 업데이트됩니다. 관심이 있으시면 팔로우하세요.
자, 본론으로 들어가겠습니다:

카드 01, 참조를 이용한 객체 조작

Java를 공부하는 사람이라면 누구나 Java가 객체지향 언어(OOP)라는 것을 알고 있습니다. 보다 "순수한" 객체 지향 프로그래밍 언어입니다. "모든 것이 객체이다"라는 속담처럼 Java 언어는 우리가 객체 지향 프로그래밍만 한다고 가정합니다. 즉, 디자인을 위해 Java를 사용하기 전에 생각을 바꾸고 객체에 관심을 옮겨야 합니다. 이것이 Java 언어를 사용하는 기본 기술입니다.

모든 프로그래밍 언어에는 데이터를 처리하는 고유한 방법이 있습니다. 때때로 프로그래머는 어떤 유형을 다루고 있는지 항상 주의를 기울여야 합니다. 요소를 직접 조작해야 할까요, 아니면 객체를 조작하기 위해 특수 구문을 기반으로 하는 간접적인 표현을 사용해야 할까요? C와 C++에서는 포인터를 사용합니다. Java에서는 "모든 것이 객체이고" 모든 것이 객체로 간주되기 때문에 이 모든 것이 단순화됩니다. 모든 것이 객체로 취급되지만 조작되는 식별자는 실제로 객체에 대한 참조입니다. 이해를 돕기 위해 실제 사례를 들어보겠습니다. 생활 속에서 우리는 TV(객체)를 제어하기 위해 리모컨(참조)을 사용합니다. TV의 채널이나 볼륨을 바꾸고 싶을 때에는 실제로 리모컨(참조)을 조작하고, 리모컨으로 TV(객체)를 제어하게 됩니다. 방을 돌아다니면서도 여전히 TV를 작동하고 싶다면 TV(물체) 대신 리모컨(참조)을 들고 다니세요 .
문자열 참조를 만들어 보겠습니다.

String str;

여기서 str은 객체가 아닌 참조일 뿐입니다. 참조는 독립적으로 존재할 수 있으며 반드시 객체와 연관될 필요는 없습니다. 리모콘이 있더라도 마찬가지입니다. TV는 독립적으로 존재할 수 없습니다. 그러나 위의 생성은 안전하지 않습니다. 안전한 방법은 참조를 생성할 때 초기화하는 것입니다. 예:

String str = "hello";

Card 02. 프로그램이 실행될 때 메모리는 어떻게 할당되나요?

프로그램이 실행 중일 때 데이터를 저장할 수 있는 위치는 5가지입니다:

  • 1, Register: 가장 빠른 저장 영역입니다. 다른 저장소와 위치하기 때문입니다 장소--프로세서 내부. 하지만 레지스터의 개수는 극히 제한되어 있어 요구에 따라 레지스터를 할당하게 되며, 이를 직접적으로 제어할 수도 없고, 프로그램 내에서 레지스터가 존재한다는 느낌을 전혀 느낄 수도 없습니다.

  • 2, Stack: 범용 RAM(Random Access Memory) 에 위치하지만 스택 포인터를 통해 프로세서에서 직접 지원합니다. 스택 포인터가 아래로 이동하면 새 메모리가 할당되고, 위로 이동하면 해당 메모리가 해제됩니다. 이는 레지스터에 이어 두 번째로 빠르고 효율적인 스토리지 할당 방법입니다. 프로그램을 생성할 때 Java 시스템은 스택 포인터를 위아래로 이동하기 위해 스택 내에 저장된 모든 항목의 정확한 수명을 알아야 합니다. 이 제약 조건은 프로그램의 유연성을 제한하므로 일부 Java 데이터(특히 객체 참조)가 스택에 저장되더라도 Java 객체는 스택에 저장되지 않습니다.

  • 3. Heap: 모든 Java 개체를 저장하는 데 사용되는 일반 메모리 풀(RAM 영역에도 위치) 힙이 스택과 다른 장점은 다음과 같습니다. 컴파일러는 저장된 데이터가 힙에 얼마나 오래 남아 있는지 알 필요가 없습니다. 따라서 힙 할당에는 많은 유연성이 있습니다. 객체가 필요한 경우 new를 사용하여 간단한 코드 한 줄만 작성하면 됩니다. 이 코드 줄이 실행되면 저장소가 자동으로 힙에 할당됩니다. 물론 이러한 유연성에는 대가가 지불되어야 합니다. 힙을 사용한 저장소 할당 및 정리는 스택을 사용한 저장소 할당보다 시간이 더 걸릴 수 있습니다

  • 4

    일정한 저장소: 상수 값은 일반적으로 내부에 직접 저장됩니다. 프로그램 코드 는 변경할 수 없으므로 이렇게 하는 것이 안전합니다. 임베디드 시스템에서는 상수가 다른 부분과 분리되는 경우가 있으므로 이 경우 ROM(읽기 전용 메모리)에 저장하도록 선택할 수 있습니다.

  • 5. RAM이 아닌 저장소: 데이터가 프로그램 외부에서 완전히 살아남는 경우, 프로그램의 제한을 받지 않고 프로그램이 실행되지 않는 동안에도 존재할 수 있습니다. 두 가지 기본 예는 다음과 같습니다: 스트림 객체 및 영구 객체 "스트림 객체"에서 객체는 일반적으로 다른 시스템으로 전송되는 바이트 스트림으로 변환됩니다. 프로그램이 종료되더라도 상태는 유지됩니다. 이 저장 방법의 비결은 객체를 다른 미디어에 저장할 수 있는 것으로 변환한 다음 필요할 때 일반 RAM 기반 객체로 복원하는 것입니다. Java는 경량 지속성에 대한 지원을 제공하는 반면, JDBC 및 최대 절전 모드와 같은 메커니즘은 데이터베이스에 객체 정보를 저장하고 읽기 위한 보다 정교한 지원을 제공합니다.

관련 기사:

Java 프로그래밍 아이디어 요약

Java 객체 지향 프로그래밍의 객체, 참조 및 내부 클래스 이해

위 내용은 Java 프로그래밍 아이디어: 참조를 사용하여 객체를 작동하고 프로그램이 실행될 때 메모리가 할당되는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.