Java函数结束时的内存回收坑

Posted 朋友圈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java函数结束时的内存回收坑相关的知识,希望对你有一定的参考价值。

做树的题目时发现的。

函数里面创建的实例,如果只是对参数赋值,是会被回收的。

 

函数

1 public static void crete(TreeNode node){
2         node = new TreeNode(111);
3     }

 

调用

1 TreeNode node = null;
2 TreeUtil.crete(node);
3 System.out.println(node.val);

 

异常

1 Exception in thread "main" java.lang.NullPointerException
2     at LeetCode101.main(LeetCode101.java:28)

 

按道理来说,我们在函数里面给这个参数创建了实例了。

但是,这个实例,会在函数结束的时候被回收掉,所以还是原来的null。

那要怎么办?要怎样才能获取函数里面操作后的结果?

把创建的实例作为返回值!

 

函数

1     public static TreeNode create(int x){
2         TreeNode node = new TreeNode(x);
3         node.left = new TreeNode(x+1);
4         node.right = new TreeNode(x+2);
5         return node;
6     }

 

调用

1         TreeNode node = TreeUtil.create(1);
2         System.out.println(node.val);
3         System.out.println(node.left.val);
4         System.out.println(node.right.val);

 

输出

1
2
3

 

不仅node的内存还在,他的左右孩子都还在

以上是关于Java函数结束时的内存回收坑的主要内容,如果未能解决你的问题,请参考以下文章

Java虚拟机四:垃圾回收算法与垃圾收集器

垃圾回收器和内存回收策略

java的finalize()函数

Java如何分配和回收内存?Java垃圾收集器如何工作?

JVM内存管理机制和垃圾回收机制

百度程序员开发避坑指南(移动端篇)