C++에서 동적으로 할당 된 배열은 메모리에서 손실되지 않는 한 삭제해야합니다. 자바에서는 똑같이해야합니까? 어떻게해야합니까?Java에서 동적 배열 삭제
답변
개발자는 java에서 메모리 할당을 해제 할 필요가 없습니다. 자바 가비지 컬렉터가 여러분을 대신해 그렇게합니다. 작동 방식을 읽을 수 있습니다. here
Java 프로그래밍 언어에서 new 연산자를 사용하여 객체의 동적 할당이 이루어집니다. 한 번 생성 된 객체는 일부 메모리를 사용하며 객체 사용에 대한 참조가있을 때까지 메모리는 할당 된 채로 남아 있습니다. 객체에 대한 참조가 없으면 더 이상 필요하지 않은 것으로 간주되어 객체가 차지하는 메모리를 회수 할 수 있습니다. Java가 자동으로 할당을 처리 할 때 명시 적으로 객체를 삭제해야 할 필요는 없습니다. 이를 수행하는 기술을 가비지 콜렉션 (Garbage Collection)이라고합니다. 메모리를 할당 해제하지 않는 프로그램은 할당 할 시스템에 메모리가 남아 있지 않으면 결국 충돌 할 수 있습니다. 이러한 프로그램은 메모리 누수가 있다고합니다.
Java에서 가비지 수집은 Java 프로그램의 수명 동안 자동으로 발생하므로 메모리 할당을 해제하고 메모리 누수를 피할 필요가 없습니다. C 언어에서는 free() 함수를 사용하여 동적으로 할당 된 메모리 할당을 해제하는 것은 프로그래머의 책임입니다. 자세히 알아보기 http://www.javatutorialhub.com/java-garbage-collection.html#wpewoJfMWffgXd8O.99
동적 배열에 대한 정의가 이해가 가지 않습니다. 길이를 알 수없는 항목 모음을 의미합니까? 그렇다면 ArrayList과 같은 콜렉션에 대해 말하고있는 것입니다.
개체 삭제에 대해 걱정할 필요가 없습니다. they're out of scope 일 때 JVM이 더 이상 사용하지 않을 때 객체를 돌 봅니다.
JVM은 코드의 실행을 분석하고 쓸모없는/범위를 벗어난 객체에서 실행 코드를 지우는 특별한 구성 요소 인 Garbage Collector을 호출합니다.
예를 들어,이 코드가있을 때 :
if(condition)
{
string myStr = "test";
//other code here
}
변수 myStr
, 그것은 더 이상 사용되지 않는 있기 때문에이 (가 if
문 범위에서의)는, 쓰레기 수집되는 JVM에 의해 표시됩니다 .
아니요, 가비지 수집됩니다. – Batty
Java에서 "일반적인"메모리 누수에 대해 걱정할 필요가 없습니다. 내장 된 가비지 컬렉터가 처리 할 것입니다 ... – TheLostMind
이것을보십시오 : http://stackoverflow.com/questions/17647194/do -not-understand-scope-of-java-java-newbie-confusion – Nishant