자바 가비지컬렉션 상속 객체, 클래스 소멸 순서

자바 가비지컬렉션 상속 객체, 클래스 소멸 순서

작성일 2023.09.26댓글 2건
    게시물 수정 , 삭제는 로그인 필요

자바에서 가비지 컬렉션이 일어나 객체가 소멸될 때,
자식 클래스가 먼저 소멸되고 그 후 부모 클래스가 소멸되나요?


#자바 가비지컬렉션

profile_image 익명 작성일 -

안녕하세요.

클래스 자체가 소멸되는 것이 아니라 객체만 소멸이 됩니다.

class A{

int n;

}

class B extends A{

int s;

}

위와같이 클래스가 있고,

B b = new B();

객체를 생성한다고 하면, 힙메모리에 B클래스 객체가 만들어지겠지요.

B클래스 객체에는 n, s 멤버변수 모두 가지고 있습니다.

이렇게 상속받은 멤버까지 모두 해서 하나의 객체입니다.

클래스라는 것은 이런 객체를 만들기 위한 설계도와 같은 개념입니다.

클래스 정보는 처음 사용될때 한번 메모리에 로딩된후에는 계속 사용이 됩니다.

참조가 없어진 객체가 발생하면 해당 객체만 삭제를 하게 됩니다.

profile_image 익명 작성일 -

Java의 가비지 컬렉션은 객체의 생명 주기를 관리하며, 더 이상 사용되지 않는 객체를 메모리에서 제거합니다. 그러나 객체의 소멸 순서는 일반적으로 클래스의 상속 구조와는 별개로 처리됩니다. 객체의 소멸은 객체에 더 이상 참조가 없을 때 가비지 컬렉터에 의해 결정됩니다.

자바에서 객체의 소멸 순서를 상속 구조와 연관시키려면, 객체의 소멸자 (또는 파이널라이저)에서 명시적으로 부모 클래스의 소멸자를 호출해야 할 수 있습니다. 그러나 Java에서는 소멸자의 사용을 권장하지 않으며, 대신 finalize() 메서드를 오버라이딩 할 수 있습니다.

class Parent { protected void finalize() throws Throwable { try { // parent finalization code } finally { super.finalize(); } } } class Child extends Parent { protected void finalize() throws Throwable { try { // child finalization code } finally { super.finalize(); } } }

위의 예제에서 Child 클래스의 finalize() 메서드는 Parent 클래스의 finalize() 메서드를 호출합니다. 이렇게 하면 Child 객체가 소멸될 때 Parent 클래스의 소멸 코드도 실행됩니다.

그러나 Java에서는 finalize 메서드의 사용을 피하고, 대신 리소스 관리를 위해 try-with-resources 또는 명시적인 리소스 해제 메서드를 사용하는 것이 좋습니다. finalize 메서드는 더 이상 권장되지 않으며, Java 9 이후로 deprecated 되었습니다.

자바 클래스 상속 출력 결과 질문

... 그런데 B클래스 객체이지만 A클래스 타입의 참조변수로도 접근이 가능합니다.... 현재멤버변수 > 상속된 멤버변수 이런 순서로 선택됩니다. a 변수가 중복시 a라고...

객체지향, 상속, 오버로딩, 오버라이딩...

... 객체지향, 상속, 오버로딩, 오버라이딩 등등요. 자바언어는 C++언어의 장점을... 예를 들어, 자바언어는 가비지 컬렉션을 지원하여 개발자가 메모리 관리를 신경 쓰지...

자바 상속 구조

... b의 상속이라서 class b 로 넘어가는건가요?? This 문은 class C를 출력하라는 게 맞는건가요? 안녕하세요. 자바와 같은 객체지향 프로그램에서는 소스에 적혀있는 순서...

자바 기본개념 상속, this 질문

... 자바에서 상속클래스에서 객체를 생성하게 되면... 따라서 아래 코드에서 번호로 매겨준 순서대로 생성자가 호출됩니다....

자바 예외 클래스 질문

... catch문을 순서대로 돌면서 처리가 가능한지 체크를 하게 됩니다. 모든 예외는 Exception을 상속받아 작성된 클래스입니다. RuntimeException 클래스는 Exception...