Java8的一个小缺点

1. java8函数式编程小引言

java8 增加了函数编程,函数可以作为参数传递,方便之处很多人已经说过了。确实也增加了java的功能,使代码更简洁,可读性增强。不过,函数式的编程相关的问题就来啦,本文从内存的泄露问题出发,提出java8中的小问题。

2. 问题代码

class Test {
public static void main(String[] args) {
    Runnable runnable = new EnterpriseBean()
        .runnable();
    runnable.run(); // 断点
}
}

class EnterpriseBean {
Object[] enterpriseStateObject =
    new Object[100_000_000];

Runnable runnable() {
    return () -> {
        // Some harmless debugging here
        System.out.println("Hello from: " + this);
    };
}
}

关键点在于 system.out.println(“Hello from:” + this) 中的this的引用。在断点处,查看变量runnable时,会发现还有一个EnterpriseBean的实例。返回的函数体内虽然只有一个输出,由于带有this,返回的匿名函数中也就包含了一个EnterpriseBean的实例。这个EnterpriseBean的实例不会被垃圾回收,直到调用释放Runnal后才释放。

3. 引用

以上发现均来自http://www.importnew.com/17292.html,感谢作者并致敬

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值