Skip to content

Instantly share code, notes, and snippets.

@linnil1
Created April 17, 2024 03:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save linnil1/aba02c9f69120d0744fefe1e20c19747 to your computer and use it in GitHub Desktop.
Save linnil1/aba02c9f69120d0744fefe1e20c19747 to your computer and use it in GitHub Desktop.
I found java doesn't release original array after being assigned by sublist
import java.util.ArrayList;
import java.util.List;
public class SublistMemoryTest {
public static void main(String[] args) {
List<Integer> largeList = new ArrayList<>();
// Measure memory usage before creating the sublist
long beforeMemory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
System.out.println("Memory usage before creating sublist: " + beforeMemory + " bytes");
for (int i = 0; i < 500; i++) {
for (int j = 0; j < 1000; j++) {
largeList.add(i);
}
// CHANGE THIS
largeList = largeList.subList(1, 2);
// largeList = new ArrayList<>(largeList.subList(1, 2));
}
// Measure memory usage after creating the sublist
long afterMemory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
System.out.println("Memory usage after creating sublist: " + afterMemory + " bytes");
// Calculate memory usage difference
long memoryUsageDifference = afterMemory - beforeMemory;
System.out.println("Memory usage difference: " + memoryUsageDifference + " bytes");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment