2014-12-29 3 views
1

Java가 참조를 내부 구조로 사용하는 이유와 Java가 포인터를 선호하지 않는 이유가 무엇입니까? 큰 문제가 있습니까? 포인터가 주소 지정에 적합하지 않거나 포인터에서 직접 주소 (액세스)를 제공하는 좋은 방법이 아닙니까?포인터를 통한 Java 참조

+1

가비지 수집기 때문입니다. – SLaks

+3

참조가 포인터가 아니십니까? 물론 직접적으로 작업하지 않아도되지만 그렇게 작동합니다. – MightyPork

답변

0

왜 Java는 내부 구조에 대한 참조를 사용하고, 왜 Java가 포인터를 선호하지 않는지.

Java는 모든 참조가 유효한 객체를 가리키는 것으로 가정하는 관리 메모리를 사용합니다. 포인터로 지불하면 많은 버그의 원인 일뿐만 아니라 어디에도 아무 것도 가리킬 수 없으므로 자동 메모리 관리가 훨씬 어려워집니다.

포인터가 주소 지정에 적합하지 않거나 포인터에서 직접 주소 (액세스)를 제공하는 좋은 방법이 아닙니까?

예,하지만 포인터는 매우 예리합니다. 또한 쉽게 오용하거나 버그를 도입 할 수 있습니다.

1

참조 은 포인터 인입니다. 진짜 차이점은 자바에서는 포인터 을 할 수 없다는 것입니다.; 즉, 임의의 메모리 위치에 대한 포인터를 만들거나 포인터에 포인터를 추가 할 수 없습니다.

Java 보안 모델은 액세스 권한이없는 메모리 영역에 액세스하거나 보호 된 내용을 읽거나 변경하면 안되는 내용을 변경할 수 없도록하는 데 크게 의존합니다 . 이러한 작업을 수행 할 수 있다면 가상 시스템의 상태를 조작하고 보안 모델을 손상시킬 수 있습니다.

그러나 포인터 연산을 사용하면 이러한 보호 기능을 그대로 유지하는 것이 불가능합니다. 그래서 그들은 자바에서 단순히 금지됩니다.

보안뿐만 아니라 보안을위한 것이기도합니다. 포인터가있는 버그는 매우 미묘하고 해결하기 어렵습니다. Java 언어는 올바른 코드를 작성하거나 예기치 않은 예측할 수없는 방식으로 오류가 발생하지 않는 코드를 작성할 수 있도록 설계되었습니다.

자바는 정의되지 않은 동작을 피하기 위해 노력하고 있습니다. 포인터 산술은 많은 불행한 방법으로 정의되지 않은 동작에 대한 빠른 경로입니다.

언어 디자인에서와 마찬가지로 대부분의 경우와 마찬가지로 트레이드 오프입니다.

관련 문제