package org.example.a; import java.util.ArrayList; import java.util.List; class Outer{ private int[] data; public Outer(int size) { this.data = new int[size]; } static class Inner { } Inner createInner() { return new Inner(); } } public class Demo { public static void main(String[] args) { List<Object> list = new ArrayList<>(); int counter = 0; while (true) { list.add(new Outer(100000).createInner()); System.out.println(counter++); } } }
如果把“static class Inner”中的static去掉就会导致内存泄漏。
因为内部类持有外部类的引用,对内部类的使用很多时,会导致外部类数目很多。此时,就算是外部类的数据没有被用到,外部类的数据所占空间也不会被释放。
所以,内部类改为静态的之后,它所引用的对象或属性也必须是静态的,所以静态内部类无法获得外部对象的引用,只能从 JVM 的 Method Area(方法区)获取到 static 类型的引用。
标签:部类,Java,int,static,内存,new,class,Inner From: https://www.cnblogs.com/privateLogs/p/17602343.html