这样定义数组
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[] 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 ... };
new Employee("1");这句因为它是匿名对象,没有引用句柄指向它,所以在执行完这句后已经变为垃圾了,GC可以回收。Employee[] emps = {new Employee("1"), new Employee("2"), new Employee("3"), new Employee("4") ... };这样写有可能在某些情况下GC没有回收已经不存活的垃圾了,所以可能会造成内在泄露。
要是它真的没有引用,下次GC就被清理了。
如果连匿名引用都处理不了,JAVA也早就该退出市场了...不过这种写法的确不是一个很好的编程风格倒是真的
JAVA能给你做内存管理吗...咱表示越听越糊涂...
Employee emp1 = new Employee("1");
Employee emp2 = new Employee("2");
Employee emp3 = new Employee("3");
Employee emp4 = new Employee("4");
emps = {emp1, emp2, emp3,emp4 ... };方法体运行完了,局部变量回收,然后所有数组对象回收了吗?貌似回收了。如果方法体里面用这个emps = {new Employee("1"), new Employee("2"), new Employee("3"), new Employee("4") ... };
就无法回收了。
不过我把它emps 设成null不就能回收了吗,不是还能简化很多代码吗?
也有可能一条线程定义了一个数组,emps = {new Employee("1"), new Employee("2"), new Employee("3"), new Employee("4") ... };然后另一个现成,改变了它的长度:emps = {new Employee("1"), new Employee("2"), new Employee("3"), ... };导致有些对象不能回收?
或者说emps = {new Employee("1"), new Employee("2"), new Employee("3"), new Employee("4") ... };这样会导致GC回收效率下降?
但觉得你这两种写法还是一样的,关键就在于用了全局变量,这是必要的吗?全局变量还得考虑线程安全,
这样写法我也觉得很好,我还喜欢这样写呢
emps = { new Employee("1").setName("xxx").setAdress("xx"),
new Employee("2").setName("xxx").setAdress("xx"),
new Employee("3").setName("xxx").setAdress("xx"), ... };
你这个 set 方法写成级联调用的了,一般来说 set 方法是没有返回值的。你这样做的话,会导致一些 POJO 类不符合 JavaBeans 规范。