Java에서 개체 삭제
다음 예제에서는 Java에서 객체를 삭제하고 가비지 수집기를 사용하는 방법을 배웁니다.
Java는 null
을 참조하여 ‘객체’를 삭제합니다
Java 객체 삭제의 첫 번째 예에서는 변수name
과age
를 초기화하는 생성자를 사용하여 클래스를 만듭니다. main
메소드에서는User
클래스의object
가 생성되고name
과age
값이 전달됩니다. 이제 객체가 초기화되었으므로이를 사용하여 age
을 얻고 비교하여 메시지를 표시 할 수 있습니다. 그러나 그 후에는 더 이상 사용할 수 없도록myObject
를 삭제하고 싶습니다.
이를 위해 myObject
를 다시 한 번 초기화하지만 null로 초기화합니다. myObject
가 null
이면이를 사용하여 메서드 나 변수를 호출 할 수 없으며 그렇게하면 예외가 발생합니다. System.gc()
는 남은 쓰레기를 수집하는 데 사용되므로 빈 필드 나 메모리를 확보하기 위해 남은 객체가 없습니다.
User
클래스에finalize()
메소드가 있음을 알 수 있습니다. 가비지를 수집하기 전에 개체에서 호출되는 재정의 된 메서드입니다.
public class JavaDeleteObject {
public static void main(String[] args) {
User myObject = new User("John", 30);
int userAge = myObject.age;
if (userAge > 25) {
System.out.println("User age is : " + userAge);
} else {
System.out.println("User age is less than 25 : " + userAge);
}
myObject = null;
System.gc();
System.out.println(myObject.age);
}
}
class User {
String name;
int age;
User(String n, int a) {
name = n;
age = a;
}
protected void finalize() {
System.out.println("Object is garbage collected.");
}
}
출력:
User age is : 30
Object is garbage collected.
Exception in thread "main" java.lang.NullPointerException
at com.company.JavaDeleteObject.main(JavaDeleteObject.java:18)
Java는null
을 참조하여 범위에 제한된 객체를 삭제합니다
아래 표시된 코드에는 클래스의 매개 변수화 된 생성자를 사용하여 값이 할당 된 세 개의 데이터 멤버가있는 Student
클래스가 있습니다. showDetails()
메소드와showNextIndex()
메소드가 있습니다. 또한 다음 학생의 색인을 표시하는finalize()
메소드가 있습니다.
Student
클래스의 새 객체는new
키워드를 사용하여 생성됩니다. Student
클래스 메서드는student1
및student2
객체에서 호출됩니다. 코드의 뒷부분에서 범위 내에 더 많은 Student
클래스 개체를 만들었습니다. 사용 후System.gc()
를 호출하여JVM
이이 범위에서 생성 된 두 객체를 가비지 수집하도록 요청합니다.
nextIndex
값은 범위에 들어가기 전에3
으로 증가하고 범위를 떠나기 전에5
로 증가합니다. nextIndex
값을 감소시키기 위해 객체가 가비지 수집되기 전에5
값에System.runFinalization()
을 두 번 사용하여finalize()
메서드를 호출합니다.
그러면 범위 내에있는 값을 제외하고 올바른nextIndex
값이 표시됩니다.
class Student {
private int index;
private String name;
private int age;
private static int nextIndex = 1;
Student(String name, int age) {
this.name = name;
this.age = age;
this.index = nextIndex++;
}
public void showDetails() {
System.out.println("Student at Index : " + index + ", Student name: " + name + ", age: " + age);
}
public void showNextIndex() {
System.out.println("Next Index: " + nextIndex);
}
protected void finalize() {
--nextIndex;
}
}
class UseStudent {
public static void main(String[] args) {
Student student1 = new Student("John", 23);
Student student2 = new Student("Doe", 20);
student1.showDetails();
student2.showDetails();
student1.showNextIndex();
student2.showNextIndex();
{
Student student3 = new Student("Sam", 22);
Student student4 = new Student("Ben", 21);
student3.showDetails();
student4.showDetails();
student3.showNextIndex();
student4.showNextIndex();
student3 = student4 = null;
System.gc();
System.runFinalization();
}
student2.showNextIndex();
}
}
출력:
Student at Index : 1, Student name: John, age: 23
Student at Index : 2, Student name: Doe, age: 20
Next Index: 3
Next Index: 3
Student at Index : 3, Student name: Sam, age: 22
Student at Index : 4, Student name: Ben, age: 21
Next Index: 5
Next Index: 5
Next Index: 3
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn