第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

一個(gè)lambda表達(dá)式是否每次執(zhí)行時(shí)都在堆上創(chuàng)建一個(gè)對(duì)象?

一個(gè)lambda表達(dá)式是否每次執(zhí)行時(shí)都在堆上創(chuàng)建一個(gè)對(duì)象?

森欄 2019-06-20 15:25:07
一個(gè)lambda表達(dá)式是否每次執(zhí)行時(shí)都在堆上創(chuàng)建一個(gè)對(duì)象?當(dāng)我使用Java 8的新語法糖遍歷集合時(shí),如myStream.forEach(item -> {   // do something useful});這不等同于下面的“舊語法”片段嗎?myStream.forEach(new Consumer<Item>() {   @Override   public void accept(Item item) {     // do something useful   }});這是否意味著一個(gè)新的匿名者Consumer對(duì)象是在堆上每次迭代集合時(shí)創(chuàng)建的?這需要多少堆空間?它對(duì)性能有什么影響?這是否意味著我應(yīng)該在大型多級(jí)數(shù)據(jù)結(jié)構(gòu)上迭代時(shí)使用舊的循環(huán)樣式?
查看完整描述

3 回答

?
蕪湖不蕪

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊

它是等同的,但不是完全相同的。簡單地說,如果lambda表達(dá)式?jīng)]有捕獲值,那么它將是在每次調(diào)用中重復(fù)使用的單例。

未精確指定行為。JVM有很大的自由如何實(shí)現(xiàn)它。目前,Oracle的JVM為每個(gè)lambda表達(dá)式創(chuàng)建(至少)一個(gè)實(shí)例(即在不同的相同表達(dá)式之間不共享實(shí)例),而是為所有不捕獲值的表達(dá)式創(chuàng)建單個(gè)實(shí)例。

你可以讀這個(gè)答案更多細(xì)節(jié)。在那里,我不僅給出了更詳細(xì)的描述,而且還測試了代碼來觀察當(dāng)前的行為。


Java語言規(guī)范第一章介紹了這一點(diǎn)15.27.4Lambda表達(dá)式的運(yùn)行時(shí)計(jì)算

摘要:

這些規(guī)則旨在為Java編程語言的實(shí)現(xiàn)提供靈活性,因?yàn)椋?/trans>

  • 不需要為每個(gè)評(píng)估分配一個(gè)新對(duì)象。

  • 由不同的lambda表達(dá)式生成的對(duì)象不需要屬于不同的類(例如,如果主體是相同的)。

  • 由計(jì)算產(chǎn)生的每個(gè)對(duì)象不一定屬于同一個(gè)類(例如,捕獲的局部變量可能是內(nèi)聯(lián)的)。

  • 如果“現(xiàn)有實(shí)例”可用,則不需要在以前的lambda計(jì)算中創(chuàng)建它(例如,它可能是在封閉類初始化期間分配的)。


查看完整回答
反對(duì) 回復(fù) 2019-06-20
?
侃侃無極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

將一個(gè)新實(shí)例傳遞給forEach方法。每次這樣做,您都會(huì)創(chuàng)建一個(gè)新對(duì)象,而不是為每個(gè)循環(huán)迭代創(chuàng)建一個(gè)對(duì)象。迭代在內(nèi)部完成forEach方法使用相同的“回調(diào)”對(duì)象實(shí)例,直到循環(huán)完成為止。

因此,循環(huán)使用的內(nèi)存不取決于集合的大小。

這不等同于“舊語法”片段嗎?

是。它在一個(gè)很低的水平上有微小的差異,但我認(rèn)為你不應(yīng)該關(guān)心它們。Lamba表達(dá)式使用InvokeDynamic特性而不是匿名類。


查看完整回答
反對(duì) 回復(fù) 2019-06-20
  • 3 回答
  • 0 關(guān)注
  • 1681 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)