2014-12-20 1 views
0

C++에서 new가 할당에 사용되면이를 동적 메모리 할당이라고하며, 이는 delete [] 문을 수동으로 사용하여 메모리를 다시 돌려줘야 함을 의미합니다. 그러나 Java에서는 결국 삭제를 사용할 필요가 없습니다. Java가 사용 후 자동으로 메모리를 다시 제공한다는 의미입니까?C++과 Java 사이의 새로운 내용 차이점

+0

Java에서 JVM은 할당 된 메모리를 관리하지만 C++에서는 직접 관리해야합니다. –

+0

기본적으로 가비지 콜렉션 – Dici

답변

0

하나 그것에 대해 더 읽고 자바는 메모리 할당과 해제를 처리하는 자바의 Garbage Collection 시스템입니다. C++에서 객체를 삭제하지 않으면 메모리 누수가 발생하여 메모리를 사용할 수 없게되지만 Java가이 문제를 제거합니다.

0

Java 및 C++은 처음 나타난 것과 다르지 않습니다. 어느 언어로든 수동 또는 자동 메모리 관리를 수행 할 수 있습니다.

C++에서 프로그램은 객체의 수명주기를 인식하고 더 이상 사용되지 않을 때 메모리를 해제 할 책임이 있습니다. 이것은 수동이어야한다는 것을 의미하는 것은 아니며 메모리가 해제되었을 때 즉시 사용할 수 있음을 의미합니다.

C++에서 자동 리소스 관리 및 가비지 수집을 할 수 있지만이 언어에 대한 요구 사항은 없습니다.

Java에서는 훨씬 간접적이며 자원을 정리하거나 해제 할 필요가 거의 없습니다. 이 작업을 수행하는 유일한 시간은 파일, 소켓, 데이터베이스 연결 또는 힙 (heap) 메모리와 같이 값 비싼 자원에 대한 프록시 일 때입니다.

Java에서 메모리 관리 및 가비지 수집은 Java 언어 사양에서 필요하며 추가 라이브러리없이 수행하거나 사용자가 작업 할 수 있다고 가정 할 수 있습니다.

0

새 항목이 할당에 사용되면 C++과 Java간에 동일하지 않습니다. Java에서는 메모리 주소를 얻기 위해 찾아 볼 수있는 참조 ID가 주어집니다.이 ID를 사용하여 해당 메모리 주소의 데이터를 변경할 수 있습니다. Java는 가비지 콜렉터가 적절하다고 생각할 때마다 (CPU 사용량이 적고, 가비지 메모리가 많음) 실행되며 참조 테이블을 통해 실행되고 모든 메모리를 비우고 더 이상 사용되지 않는 모든 참조를 삭제합니다 귀하의 프로그램에 의해.

반면에 C++은 직접 메모리 주소를 반환합니다. 자동으로 데이터를 해제하는 가비지 컬렉터가 없습니다. 중간 참조 테이블없이 직접 데이터를 비우려면 delete가 필요합니다.

관련 문제