Created
April 17, 2024 03:35
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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