匿名类数组,会造成内存泄漏吗? 这样定义数组 Employee[] emps = {new Employee("1"), new Employee("2"), new Employee("3"), new Employee("4") ... }; 听某架构师说,这样写可能会内存泄漏影响性能,求证一下。
不然就的这样写了,太麻烦: Employee emp1 = new Employee("1"); Employee emp2 = new Employee("2"); Employee emp3 = new Employee("3"); Employee emp4 = new Employee("4"); ...
Employee[] emps = {emp1, emp2, emp3,emp4 ... };
------解决方案-------------------- 某架构师?有这说法吗,看不出来有什么区别。。
------解决方案-------------------- 比如Employee emp1 = new Employee("1");有指向此实例的句柄引用emp1,在执行完这句后该实例还是存活的,即GC不去回收它。 new Employee("1");这句因为它是匿名对象,没有引用句柄指向它,所以在执行完这句后已经变为垃圾了,GC可以回收。
Employee[] emps = {new Employee("1"), new Employee("2"), new Employee("3"), new Employee("4") ... };这样写有可能在某些情况下GC没有回收已经不存活的垃圾了,所以可能会造成内在泄露。
------解决方案-------------------- 推荐一篇博客,Java 内存管理原理、内存泄漏实例及解决方案研究我觉得对楼主你理解那个架构师的讲法有帮助。
------解决方案-------------------- 谁说没引用的?那个数组变量不就引用他们么?
------解决方案-------------------- 用完数组后手动将所有的元素置null,否则的话,数组完蛋后GC第一轮收集数组对象,之后才会再次收集里面的元素对象