吉力馬札羅山山坡大火 坦尚尼亞消防員連日撲救

摘錄自2020年10月13日中央社報導

東非國家坦尚尼亞官員表示,消防員連續第3天與吉力馬札羅山(Mount Kilimanjaro)山坡上的大火對抗,希望控制這座非洲第一高峰的火勢。

路透社報導,大火11日起於胡娜區(Whona),強風助長了火勢,官員表示,風勢今天已經減弱。胡娜區是使用曼達拉(Mandara)和霍倫坡(Horombo)兩條登山路線的登山客的休息中心。

坦尚尼亞國家公園管理局(TANAPA)官員謝魯特(Pascal Shelutete)向路透社表示,消防員與相關人員正努力控制火勢,並稱火勢已「幾乎獲遏止」。

氣候變遷
國際新聞
坦尚尼亞
吉力馬扎羅山
大火

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

澳洲科學家發現巨型珊瑚礁 比帝國大廈還高

摘錄自2020年10月29日中央社報導

施密特海洋研究所(Schmidt Ocean Institute)本週表示,澳洲科學家在大堡礁發現一座獨立珊瑚礁,高度超越紐約帝國大廈和巴黎艾菲爾鐵塔,為120多年來首見。

這座「刀片狀」珊瑚礁將近500公尺高、1.5公里寬,頂端位於海平面下40公尺。由畢曼(Robin Beaman)博士率領的詹姆士庫克大學(James Cook University)科學家團隊20日在科研船福克爾號(Falkor)上,於大堡礁北方海床進行繪測作業時發現這座珊瑚礁。

科學家利用水下機器人SuBastian錄下他們探索這座新珊瑚礁的過程,一路上也在蒐集海洋樣本,之後將會存放在昆士蘭博物館(Queensland Museum)和昆士蘭熱帶博物館(Museum of Tropical Queensland)。

海洋
國際新聞
澳洲
珊瑚礁

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

哈弗H6最強對手換代,天窗無敵,內飾升級,9.98萬你買嗎?

值得一提的是,全景影像四攝像頭還具備行車記錄儀功能,防護功能遠勝傳統行車記錄儀。此外,法國法雷奧一鍵泊車系統(12顆超聲波雷達)、鑰匙遙控泊車等功能在同級更是前所未見,勇氣可嘉。配置方面,前排座椅加熱、通風和空調功能被集成至排擋桿前方的獨立觸控屏上,估計出於成本控制輕觸后未見震動反饋,增加了盲操學習成本,所幸保留了聲音反饋。

滿足小有成就的現狀,缺乏居安思危意識,是營銷領域中不少先鋒產品的通病。等恍悟備受衝擊、該有所行動時,卻被時代洪流淹沒的例子,比比皆是。

(老款CS75)

上市四年以來,長安CS75無論在群眾口碑抑或銷量方面,都頗有建樹。隨着時間推移、消費升級,外觀和內飾開始顯得落伍、俗套。為了喚起潛在買家熱情,中期改款CS75厲兵秣馬、煥新而來。

全新CS75能否追隨自主SUV往上發展、實現高端化的潮流?身體力行前往世外桃源香格里拉,一試究竟。

外觀設計

長安睿騁CC砍獲德國紅點設計大獎后名噪一時,飄逸流暢的蝶翼式前臉讓長安轎車產品觀感度躍升一個維度。這份美好卻未能沿襲至全新CS75上,引以為憾。

所幸的是,新款CS75內外設計均往积極方向在推進。外觀一改老款地盤包工頭的“油膩”印象,大量的橫向鍍鉻飾條強調年輕化,比頗具爭議的“CHANGAN”字母臉強不止一星半點。

車燈儼然成為時下車型外觀設計的重中之重,深諳於此的長安為新款CS75換裝帶自動大燈功能的全LED大燈,造型犀利、燈腔內部精緻,跟來車怒目相視的感覺。

箭羽造型的霧燈區域安放在前包圍左右兩側,LED轉向燈帶巧妙地鑲嵌其上,內凹線條的勾勒對運動感的提升大有裨益,成功化解“中年危機”。

新款車型配有ACC自適應巡航功能,車頭底部的模塊能窺探一二,較強的塑料感缺乏精緻度。

車身尺寸與舊款別無二致,長/寬/高:4650/1850/1705mm,軸距:2700mm。側腰線條平鋪直敘、寬厚瓷實,屬四平八穩的類型。

后視鏡集成了轉向燈,從底部的攝像頭和鏡面標識可知,新款高配車型配備了盲區監測功能和全景影像。

試駕車型選用19英寸雙色鋁合金輪圈,與之搭配的是優科豪馬GEOLANDAR G91輪胎(225/55 R19),為四驅輪胎開發的獨特胎面膠配方,溝槽設計主打濕地操控、制動性能,乾地制動表現一般。

自主SUV一窩蜂玩壞了懸浮式車頂、碩大英文尾標后,又將魔爪伸向了當年林肯MKZ敢為人先的貫穿式尾燈。不出多久,貫穿式尾燈會淪為自主SUV中俗套的設計元素。

選用貨真價實的雙出排氣布局,扁平排氣口造型不落窠臼,與反光帶、尾燈造型遙相呼應,呈現出整體感喜人的尾部輪廓。

內飾配置

與外觀一樣,全新CS75的內飾表現出足夠的革新度和顛覆感,舊款內飾的鄉村氣息黯晦消沉,取而代之的是與時俱進的內飾氛圍。

軟質材料應用廣泛,多處的單雙縫線交替,方寸之間,盡顯品位。新車內飾供科技黑和輕奢棕兩色可選,後者配備仿木紋材料更是時刻在強調檔次感。

10.25英寸全液晶儀錶盤、10.25英寸懸浮式觸控屏、电子擋桿、平底方向盤、大面積的鋼琴烤漆面板、七色氛圍燈對車內質感的提升大有裨益。

其中試駕車型的10.25英寸懸浮式觸控屏配備全景影像和虛擬影像功能,显示效果細膩,提供優良閱讀效果,可謂女司機福音。

以配置水平見長的自主車,無鑰匙進入/啟動功能自然必備必不可少,全系標配德爾福STT智能啟停功能,優化燃油經濟性。

遠不止此,強調科技感的全液晶儀錶盤能與中控大屏實現雙屏互動,導航、ACC全速自適應巡航(0-150km/h)等信息同樣能呈現於儀錶盤,甚是方便。

值得一提的是,全景影像四攝像頭還具備行車記錄儀功能,防護功能遠勝傳統行車記錄儀。此外,法國法雷奧一鍵泊車系統(12顆超聲波雷達)、鑰匙遙控泊車等功能在同級更是前所未見,勇氣可嘉。

配置方面,前排座椅加熱、通風和空調功能被集成至排擋桿前方的獨立觸控屏上,估計出於成本控制輕觸后未見震動反饋,增加了盲操學習成本,所幸保留了聲音反饋。

溫度調節和吹風模式保留實體按鍵,長安工程師對人機工程學的考究是可感知的。但如何改善光滑面板的反光現象,會是道不小的難題。

最為人稱道的當屬換裝电子擋桿,採用輕觸方式激活p擋的方式同級罕見,但使用體驗有待商榷,需要適應一段時間。

貴為長安產品矩陣中的銷量擔當,新款CS75僅前排車窗支持一降升降功能,為車內乘員日常啟閉車窗增添不便,不應當,扣分項。

空間表現

國人喜聞樂見的全景天窗如常出席,1.12平方米的採光面積(同級最大)有效拉升乘員的暈車閾值。輔以靠背支持多角度調節的後排座椅以及接近純平的後排中央地板,絕對是說服長輩掏包的有力論證。

整體空間表現絲毫不怵主流中型SUV水準,不易聽到乘員的抱怨聲。手套箱、扶手箱足以安放常規單反相機,擋桿前方、杯架、四門門把手處的儲物格均能容納大尺寸智能手機,實屬難得。

此外,後排座椅安全帶卡扣可收折,不磕屁股。後排座椅支持4/6分割放倒,放倒後接近純平狀態,宜商宜居。

動態表現

新款CS75搭載全新藍鯨 280T 直噴增壓發動機,這枚1.5T發動機在德爾福高壓共軌直噴系統、霍尼韋爾增強脈衝渦輪增壓器、水冷中冷的加持下,最大馬力178ps/5500rpm、峰值扭矩265N·m/1450-4500rpm,官宣百公里加速時間為10s,搭配日本愛信第三代6AT。

此前舊款CS75機油增多事件牽動不少潛在買家的心,而全新CS75搭載的發動機選用全新的噴油方案以及熱管理系統,暖機時間較此前縮短近2min,輔以重新調校的ECU程序,各位無需過慮。

起步階段存有“起床氣”,若不將油門踩得比預期稍深,車輛更願意停留在慵懶狀態。高速下再深踩油門,引擎艙發出歇斯底里的嘶吼聲,小排量渦輪增壓的單薄感被進一步放大。

變速箱齒比設定綿密,3擋開始便能實現閉鎖控制,對動力輸出的連續性、降低動力損耗等大有裨益。升擋后發動機轉速小幅回落,努力維持在峰值扭矩輸出區間,兢兢業業地保持加速力道。至於推背感嘛,沒有。

剎車前半段虛位較大,制動力輸出不夠線性,日常市區行駛不易形成輕鬆駕駛氛圍。更青睞一點就有、漸進式的剎車腳感,還望廠商後期優化。

新車選用前麥弗遜、后多連桿獨立懸架結構,配備美國天納克MTV-CL減震器閥系,彈簧K值較同級家用SUV高,在面對坑窪、起伏路面時動作稍顯敏感。重心轉移與駕駛員預期不夠默契,但勝在拋跳抑制處理到位。

一鍵泊車、鑰匙遙控泊車、遠程控制(發動機、空調、空氣凈化、遠程防盜追蹤)、后追尾預警、開門碰撞預警、隨動氛圍燈、同級最大天窗、电子擋把、安第斯灰車漆,這些同級罕見甚至前所未見的配置,都被新款CS75一一用上。

(售價:9.98-15.98萬元)

相信這是CS75深思熟慮后的改進,因為長安深知顏值拼不過WEY VV5,內飾氛圍、机械規格也難敵領克01,為此選擇在產品年輕化、科技互聯環節大下苦功,清晰的定位有望搶佔豪華自主SUV的年輕潛在買家。

相近的預算,CS75要說服國人不選合資緊湊型SUV,尚屬馳高鶩遠。我想,大概還差一份如逸動、睿騁CC般驚艷、精緻、創新的設計手稿吧。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

90后買起來也輕鬆,10萬出頭買這些車你才不會後悔

這一部分人則跟表現中庸之道的卡羅拉契合,沉穩並不是中年人的詞彙,成家立業的年輕人同樣需要這份性格。辣評:卡羅拉的外觀不像思域那麼激進,極高辨識度的豐田前臉讓你開出去並不會掉面子。之所以用沉穩來形容卡羅拉,除了外觀之外,簡潔的內飾、不急不緩的動力表現、穩定的油耗都是卡羅拉的特點。

90后已經成為消費的主力軍,為什麼汽車在外觀的設計上越來越趨向於年輕化、運動化,就是為了迎合年輕消費者的口味,因而汽車變得個性分明。人有性格,車也有性格,我們所說的磨合期就是源自於此。為什麼二手車市場出現這麼多准新車,不是因為汽車出了事故,或者發了大財想要換新車,而是車主發現車並不適合自己。那麼買車為什麼不買契合自己性格的呢,確認過性格,找到對的車。

經濟崛起的這批年輕人或熱血或沉穩或放浪不羈或剛中帶柔……靠着努力與堅持,一步步走向成功,豪車目前對他們來說還很遙遠,10-15萬這個級別恰到好處,經濟上不會那麼吃力。那麼接下來要介紹的車符不符合你的性格?一起來看一下。

熱血思域

十代思域銷量持續增長的原因之一是前幾代思域口碑的加持,但認為最大的原因在於它年輕的外表加熱血的心。外觀上對年輕人有着極大的吸引力,車身低趴,線條之間搭配得很好,車頭線條柔和,腰線則凌厲。跟現在有個性的年輕人一樣,衣着光鮮,打扮新潮,如果你認為它是安分守己的乖孩子,那你就大錯特錯了。

現在很多廠家的宣傳往往都會打上秒天秒地秒思域的名頭,但是他們從來不敢說輸了直接燒車這樣的大話,因為他們旗下所謂的神車全都抵擋不了思域那顆火熱的“心”。思域1.0T、1.5T的發動機同屬本田當家技術-地球夢系列發動機,只不過1.0T是3缸發動機,不要因為它是三缸就小覷它。須知道缸內直噴、進排氣可變正時系統、進氣側可變升程技術、變排量機油泵等主流發動機技術都出現在它的身上,在保證燃油經濟性的同時,也為它帶來了125ps的動力;1.0T尚且如此,更不用說更為強大的1.5T 177ps的發動機。

辣評:在內飾、配置同級別都差不多的車型里,思域憑藉著較為強大的動力,再加上與CVT、6擋手動變速箱之間的配合,車主在享受速度的同時,換擋也比較順滑,一個同樣有衝勁的人可以掌控這台有衝勁的車,這才是這麼多人選擇它的理由,不知道年輕的你會做出怎樣選擇。

沉穩卡羅拉

思域不是唯一的選擇,還有同樣優秀的卡羅拉,一開始就說過,選擇契合自己性格的車。當然不是每一個人都這麼熱血衝動,有的人性格沉穩,遇事不急不緩。這一部分人則跟表現中庸之道的卡羅拉契合,沉穩並不是中年人的詞彙,成家立業的年輕人同樣需要這份性格。

辣評:卡羅拉的外觀不像思域那麼激進,極高辨識度的豐田前臉讓你開出去並不會掉面子。之所以用沉穩來形容卡羅拉,除了外觀之外,簡潔的內飾、不急不緩的動力表現、穩定的油耗都是卡羅拉的特點。你很難在這輛車上找出明顯的短板,同樣,令人側目的亮點也沒有。總的來說,這樣一輛車適合那些低調又不失格調的成熟人士。

放浪不羈自由本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

厲害了!除了find命令,還有這麼多文件查找命令,高手必備!

大家好,我是良許。

在系統里查找文件,是所有工程師都必備的技能(不管你用的是 Windows 、Linux、還是 MacOS 系統)。對於 Linux 操作系統,單單一個 find 命令就可以完成非常多的搜索工作。

但是,文件搜索命令遠不止一個 find 命令,還有很多。本文就對 Linux 下文件搜索命令進行一個科普,讓你能夠在短時間內找到自己需要的文件。

1. find

find 命令應該是最經典的命令了,談到搜索工具第一個想到的肯定是 find 命令。但是,find 命令非常強大,想要把它的功能都介紹一遍,恐怕要寫好幾篇文章。

所以,這裏就偷個懶,介紹最基本的,根據文件名查找文件的方法。假如我們想搜索當前目錄(及其子目錄)下所有 .sh 文件,可以這樣搜索:

2. locate

locate 是另外一個根據文件名來搜索文件的命令。區別於 find 命令,locate 命令無需指定路徑,直接搜索即可。

這個命令不是直接去系統的各個角落搜索文件,而是在一個叫 mlocate.db 的數據庫下搜索。這個數據庫位於 /var/lib/mlocate/mlocate.db ,它包含了系統里所有文件的索引,並且會在每天早上的時候由 cron 工具自動更新一次。

正因為如此,locate 的搜索速度遠快於 find 命令,因為它直接在數據庫里檢索,速度自然更快。

locate 命令在找到文件之後,將直接显示該文件的絕對路徑,比如:

但是 locate 命令有個弊端,它無法搜索當天所創建的文件,因為它的數據庫一天只在早上更新一次。比如我現在創建一個新文件,locate 沒辦法搜索到:

為了解決這個問題,我們可以使用 updatedb 命令手動去更新它的數據庫:

$ sudo updadb

然後,我們就可以搜索到新文件了。

3. which

which 命令主要用來查找可執行文件的位置,它搜索的位置指定在 $PATH$MANPATH 環境變量下的值,默認情況下,which 命令將显示可執行文件的第一個存儲位置:

如果某個可執行文件存儲在多個位置,可以使用 -a 選項列出所有的位置。

如果你想一次性查找多個文件,可以直接跟在 which 命令後面即可。

4. whereis

whereis 命令會在系統默認安裝目錄(一般是有root權限時默認安裝的軟件)查找二進制文件、源碼、文檔中包含給定查詢關鍵詞的文件。(默認目錄有 /bin, /sbin, /usr/bin, /usr/lib, /usr/local/man等類似路徑)。

一般包含以下三部分內容:

  • 二進制文件的路徑
  • 二進制文件的源碼路徑
  • 對應 man 文件的路徑

比如我們現在搜索 ls 命令:

我們可以使用 -b 選項來只搜索可執行文件所在位置,使用 -B 選項指定搜索位置,使用 -f 選項列出文件的信息。

同樣地,我們可以使用 -s 限定只搜索源碼路徑,使用 -m 搜索 man page 路徑,使用 -s 指定搜索源代碼文件的路徑,使用 -M 指定搜索幫助文件的路徑。

公眾號:良許Linux

有收穫?希望老鐵們來個三連擊,給更多的人看到這篇文章

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

對抗代碼遺忘的思考——提問回顧與個人總結

一、提問回顧

提問博客點這裏

關於第一章中的“軟件的非連續性”

經過這一學期的實踐,我對軟件的非連續性有了比較具體的認識。

在我們的項目中,後端涉及比較複雜的狀態機,而可能一些小的輸入變化就會觸髮狀態機的改變,進而影響系統的運行狀態。測試後端狀態機是整個項目最困難、最複雜的地方,在這部分,軟件的非連續性就體現得淋漓盡致。

而應對這種困難的方式也有很多,一方面,可以做充分的測試,盡量覆蓋狀態機的每一條狀態轉移路徑,另一方面,在設計時也要做好充分的考慮,盡量讓系統的狀態數較少,轉移數較少,從而使得系統的穩定性提高,易於維護和管理。

關於第二章中提到的“單元測試”

在學期初提出的問題是

是否有必要追求100%覆蓋率的單元測試

經過這一個學期的實踐,我覺得我找到了答案,測試是必需的,但100%覆蓋率的單元測試既不必要,不也現實。

在這個學期的項目中,我們的產品從前端到後端涉及到了瀏覽器、服務器、Docker、文件服務器、磁盤文件系統。其中,很多功能都是需要多個組件協同完成的,而單獨處於一個組件內部的單元測試常常無法兼顧整體,例如,在服務器系統內就很難監控到Docker的運行狀態,相應的單元測試也就很難開展。因為不存在一個組件可以訪問和控制到整個系統的每個組件,如果真的存在這樣的組件的話,那說明系統的設計也是不好的,沒有很好地實現系統層次之間的隔離,整個軟件的耦合度比較高。

但是,這是不是意味着我們可以放棄對單元測試的要求而為偷懶找借口了呢?不是的。

首先,單元測試依然起着十分重要的作用,拿建築樓房為例子,單元測試的作用就是保證每個磚塊、每根鋼筋的質量,雖然它很難保證整個樓房的藍圖設計是正確無誤的,但是作為第一層保障,它可以有效地保證我們的最低層組件工作正常。

以我們的項目為例,在後端服務器實現中,會用到很多的工具類,這些類之間的耦合度很低,各自完成相關的一系列功能,為上層提供服務。單元測試在這裏就可以發揮很大的作用,對每個工具類的每個方法進行全面的測試,可以為將來進一步的開發排除很多潛在的隱患。

而除此之外,我還認識到了測試不僅僅是單元測試這麼簡單,測試是一門學問,相應的也有諸多經典的測試方法,例如,在我們的項目開發後期,常常採用錄製腳本的方式進行測試,通過瀏覽器錄製一系列操作形成腳本,這個腳本可以重放,從而在軟件開發過程中可以隨時回歸測試,保證之前腳本中包含的功能運行正常。

所以,總結來說,測試十分重要,但100%的單元測試往往不切實際,但在單元測試無法覆蓋的地方,必須要有其他的測試手段進行彌補,要保證軟件的每個環節都有相應的測試作為保障,才能在接下來的開發中保持軟件的高質量。

關於第四章中提到的“結對編程”

在學期初提出的問題是

結對編程的開發方式開起來很美好,但是在實際團隊開發中真的有廣泛使用嗎

經過本學期的結對編程實踐,我依然對當初提出的問題持保留意見,也尚不能完全認同結對編程中的所有優點。

在書籍中介紹到結對編程有如下幾個優點

  • 可以起到教學作用,技術高的程序員可以幫助技術較弱的程序員進步
  • 可以提高代碼質量,因為代碼的每個部分的質量都取決於一對程序員中在該方面技術較高的一個
  • 可以提高團隊凝聚力,促進團隊交流,利於團隊管理
  • 可以有效應對團隊人員變動

針對這幾點,我也想談談我在實踐過接對編程后的理解和困惑。

  • 可以起到教學作用,技術高的程序員可以幫助技術較弱的程序員進步

關於這個優點我完全認同,在接對編程實踐中,我從搭檔身上學到了不少東西,不論是編程技巧還是設計藝術,同時,我有時也能夠為他提供一些幫助和想法,應該是完全起到了相互促進的作用。

但是,在這個優點背後有一個問題值得思考,也是我所困惑的。這樣的時間成本是否較高,一方學到東西的代價是另一方需要停下開發的腳步,而且,並非每個人都有成為老師的潛質,有的人技術高超但是表達能力不強,讓他們教授別人技術或許不如讓他人查閱相關資料來的效率高。同時,編程和思維都是有節奏和狀態的,打斷編程者的連續輸出其實對於編程人員來說是一件效率很低的事情,這樣看來,這個教學作用的成本是否較高。

  • 可以提高代碼質量,因為代碼的每個部分的質量都取決於一對程序員中在該方面技術較高的一個

這個優點我也完全認同,但是,在我實踐過程中的體會就是,達到這個最優往往會經歷一番周轉。

當雙方在某個設計點上意見不一致時,需要停下進行分析,這本身沒有問題,尤其是在雙方技術水平相差較大時,一方會主導話題,從而使得問題的討論和解決較快。而當雙方技術水平相當時,問題就可能出現,可能雙方各有不錯的設計,但這兩個設計相去甚遠,說服任意一方接受理解另一方的設計都是比較困難的事情。其本質就是默契問題,是否雙方有很高的默契度,編程和設計習慣上風格一致,這些都影響着結對編程的效果和實際性。倘若雙方無法保持高度默契,那麼有時時間就會被浪費在類似上面提到的場景上。

  • 可以提高團隊凝聚力,促進團隊交流,利於團隊管理

這一點我完全認同,也認為十分實際,當下,很多公司也有技術茶話會這樣的活動,目的也是為了可以一邊交流技術、提高團隊水平,一邊也可以提高團隊的凝聚力、促進團隊交流。

  • 可以有效應對團隊人員變動

確實有這方面的意義,但是我個人感覺這依然沒有解決本質問題,這樣的解決辦法下,風險依然是在人員本身上,只不過將一個人變成了兩個人而已。

而我認為更好的解決辦法可以是完善相關的內部文檔,每個人負責各自工作範圍內的技術文檔維護,這樣可以有效地規避掉人員變動的風險。

這一點在這學期的強制轉會中深有體會,據我了解,有的團隊就將項目開荒初期的學習和技術文檔維護了下來,從而使得轉會新來的成員可以快速上手項目,團隊的開發進度不會受到很大的影響。

關於第十六章中提到的“要成為領域的專家,才能創新”

在書中,作者的觀點是這樣的

這個想法看起來沒什麼錯,我們不就是為了成為某個領域的專家,才來上學,拿學位,希望拿到學位之後成為專家,然後再開始這個領域的創新?但是統計數據表明,70%的創新者說,他們最成功的創新,是在他們的拿手領域之外發現的。

之後作者舉出了HTTP的誕生阿里巴巴的誕生等例子,佐證上面的觀點。

經過這學期的實踐,我對這個觀點有了一定的理解,也有了一些自己的看法。

在這學期,我們是自選項目,也算是做了一些創新性的設計實現,但是這背後是經過了一定的調研和學習才得來的。雖然不能說經過調研我們就成為了領域的專家,但是至少對領域有了一定的了解和認知,知道哪些是實現了的,哪些是空白的,哪些東西因為沒人想到所以沒人做,哪些東西因為難度太大所以沒人做。

當然,作者的意思不是說對某個領域聞所未聞就企圖在其中有所創新,而是說創新的領域不一定是自己最拿手的領域。這一點,經過這學期的實踐,我有了全新的理解。

創新和實現不同,創新更關注的是要站在一個應用者和設計者的角度去思考,而不是實現者或者架構師的角度,它更多關注的是需要什麼而不是如何實現。當然,這兩者都十分重要,單純有想法但無法實現也無濟於事。但是,這背後正是作者想要表達的意思,不一定每個人都有實現某個東西的能力,但是每個人一定都有想到、想出某個東西的能力。

那我們的項目為例,我們發現在初學編程時,環境的配置很麻煩,IDE的安裝很麻煩,所以我們想解決這個問題,於是我們提出了自己的WEB版IDE,對這方面的需求提供了一定的支持。這個創意源自於我們的真實需求,同樣,那些偉大的創意,也往往來自於真實的需求。這正是作者想要表達和闡述的。

關於第十七章中提到的“磨合階段”

經過這學期的實踐,我發現沒有磨合階段的團隊和無法磨合的團隊都很少,以我們的團隊為例,大家在最開始雖然意見不統一,但是經過一段不長的時間的調整和交流,很快大家在認識上就可以達成一致。

我認為,除了一些極端人員難以融入團隊,可能會成為團隊的害群之馬以外,大部分時候,團隊都是可以磨合和愉快合作的。

而在學期開始時,我提出了如下問題

如何判斷一個團隊是處於“磨合階段”還是說這個團隊的人員配置本身真的存在問題呢

針對這一點,結合我的實踐體會,我認為,如果一個團隊能夠明確地完成分工,並且每個人都能夠清楚自己的職責和任務,那麼這個團隊就可以繼續合作下去。即使最開始存在團隊成員的進度不能很好地達標的情況,但也依然可以認為團隊的人員構成本身沒有問題,是可以合作的。

因為如果每個成員都清楚自己的任務和職責,那麼這至少說明了大家在工作和認識上達成了一致,在這個一致達成的基礎上開展後續的合作都是有可能的。而倘若成員之間連分工和職責分配都無法明確,則要麼是團隊管理出了問題,PM沒有很好地協調成員,要麼就是團隊成員無法達成一致,整個團隊內對任務和目標沒有一個清晰的認識和把握。

所以,我的理解是,團隊成員之間能否對團隊任務和目標有一個統一的認識和把握是可以作為評判團隊人員配置是否合理的一個重要標準。

二、新的問題

實踐出真知,經過一個學期的實踐后,再回顧最初提出的問題,確實顯得有些稚嫩和缺乏實踐了。

不過在實踐過程中,我也產生了一些新的問題,下面提出來和大家共同探討。

如何對抗歷史代碼遺忘問題

這個項目總共歷時2個月,從最初的搭建,到後來項目功能越來越多,魯棒性越來越強,這其中都是需要進行代碼的修改和添加的。

然而,在項目後期常常會出現一個情況,就是幾周前的代碼在幾周后再次閱讀時不能很快地回憶出其中的實現細節。

這裏並不是想表達代碼的可讀性較差,即使是在充分利用面向對象編程和函數式編程的優勢的情況下,回顧以往的代碼依然要耗費一定的時間去閱讀。

特別是在系統的狀態較多較複雜的情況下,這種問題尤為明顯,需要花費比較多的時間理清楚系統的狀態遷移。

我認為,完備的設計文檔和代碼註釋會有幫助,同時,設計多個小型專用系統來替代單一的多功能大型系統也會有所幫助。

但是我並無法滿足於上述兩種可能的解決方案,同時,因為問題暴露較晚,所以我也沒有機會去實踐檢驗上述辦法是否真的有效。

所以在這裏提出這個問題,希望能夠得到幫助。

軟件功能和軟件安全性的矛盾

網絡安全是一個很大的領域,而WEB應用依賴於網絡,自然WEB安全也是一個很大的話題。

在項目初期,我們花費了不少時間在安全機制的設計上,甚至對於安全機制的考量一度影響到了我們正常功能與核心功能的開發進度。

我們每個人都承認,在軟件領域,軟件的安全性無論對於用戶還是開發者都是十分重要的,它關乎雙方的利益。但是,在能力有限,或是缺乏相應的專業技術人員的情況下,過多的安全設計考慮常常會影響到功能的開發。

所以,我很困惑應該將安全機制設計放在軟件開發的哪個階段。

倘若在最初軟件設計時就將大部分安全機制考慮到並設計在最初架構中,那這樣肯定會影響到軟件的開發進度,特別是在缺乏專業技術人員的情況下。

而若不在最初設計時將安全機制考慮在內,而寄希望於在後期逐漸添加安全機制,那麼很可能出現一種情況,就是為了添加安全機制,軟件架構需要一些變動,這有時甚至會破壞單元測試的可用性,因為更高的安全性背後往往是更低的便利性,可能會有一些原本可以正常工作的單元測試不能在新的安全機制下運行,這就又給回歸測試帶來的困難,進而迫使軟件開發進入了一種比較危險的狀態。

所以,我很想知道,在有限的條件下,應該如何平衡安全機制設計和功能開發。

三、實踐知識點回顧

需求階段

在需求階段,我學到的知識點是

需求調研不僅要保證提出的需求是真需求,同時也要保證我們的產品有優於同類產品的地方

我們的項目是WEB版的IDE,其實,這個領域的同類產品還是有不少的,但是我們在需求調研時提出了我們獨特的地方,即面向新手

我們提出的需求是,許多新手初學編程時會被諸如環境配置、IDE配置等一系列配置工作阻礙,而我們的目標就是為他們消除阻礙,能夠提供一個開箱即用的編程環境。

那麼,我們提出的需求是真需求嗎?是的。

據調查,很多大一新生在編程學習的前半個學期都會對開發環境有着或多或少的困惑和不解。然而理解這背後的一系列內容又本身超出了他們現有的能力範圍,那麼,我們產品的使用人群和使用場景也就應運而生了。

而我們的產品是否有優於同類產品的地方呢?是的。

根據調研,市面上大多數的WEB版IDE的功能都十分強大,基本涵蓋了非WEB版IDE的絕大部分功能。但同非WEB版的IDE類似,這些WEB版的IDE依然使用難度較高,需要一定的經驗,也需要一定的配置,並不能做的開箱即用,而這就是我們產品的優勢。

設計階段

在設計階段,我學到的知識點是

有效地分隔任務為若干個子任務會有利於設計的進展

在我們項目最初的設計階段,我們就將項目進行了分隔,粗略分為了前端、編輯器、後端這三個部分,而這三個部分又各自被分隔為若干個更小的部分,然後針對每個部分的功能需求去單獨設計。這樣,一方面有利於強化對於項目的整體把握,另一方面也有利於控制軟件的複雜度,可以使得每個小部分都得到較優的設計和實現。

實現階段

在實現階段,我學到的知識點是

團隊開發中的每日例會十分重要,有利於每個成員把握整體的開發進度

在alpha和beta階段都有14天的scrum階段,其中每天都要舉行例會,在實現階段的每日例會是十分重要的。

一方面,通過每日例會,每個成員都可以比較清晰地把握團隊整體的開發進展,進而便於規劃自己未來幾天的任務。

另一方面,也可以起到監督和督促的作用,在每日例會上,大家都會彙報自己的工作進展,這在無形中就起到了督促作用。

此外,每日例會也能夠起到活躍團隊氣氛、促進團隊團結的效果,每日例會不僅是彙報工作的地方,也是團隊成員交流的機會。

測試

在測試階段,我學到的知識點是

要常常回歸測試,不要等到最後統一測試,那樣往往費力不討好

在alpha階段,我們的測試基本上是在發布前統一進行的,在開發過程中的測試較少,所以最後發布前的測試工作十分緊張。

統一測試的壞處在於,一方面,統一測試的工作量很大,面對一個初有體積的項目,要進行覆蓋度較高的測試是十分耗時耗力的工作。另一方面,在最後統一測試的修復成本較高,在軟件開發階段發現並修正錯誤往往是比較容易的,但是當軟件完成了整合,再進行測試並修正錯誤,那樣的修復成本往往較高,因為在軟件整合完成之後發現的BUG有可能是整合導致的,也有可能是某個組件自身帶來的,這樣不僅問題定位困難,而且修復時常常會涉及到多個組件,牽一發而動全身。

發布

在發布階段,我學到的知識點是

推廣十分重要,優秀的推廣能夠助力讓產品最終擁有大量的用戶

在alpha階段的發布環節,我們團隊並沒有十分重視產品的推廣,因而導致在alpha階段最終用戶數量不多,相應的,收到的用戶反饋也就較少,為beta階段的展開帶來了一定的困難。

而在beta階段,我們及早進行了發布和推廣,有力地吸引了一批有效用戶,他們為我們的項目提出了寶貴的意見和建議,從長遠來看,這將十分有助於我們產品的進一步發展和更新。

維護

在維護階段,我學到的知識點是

要做好系統數據收集工作,在維護階段要密切關注系統數據記錄,及時發現系統可能存在的問題

在alpha階段,我們的後端系統並沒有設計太多的日誌系統,用戶的操作基本都沒有被有效記錄下來,導致維護時出現了問題很難定位。

在beta階段,我們針對後端系統的設計強化了系統日誌方面的實現,記錄了所有數據庫查詢操作、API訪問操作等諸如此類操作的記錄,便於在維護時定位錯誤和排查隱患。

四、理解與心得

無論是個人項目、結對項目還是團隊項目,都需要有一個思路清晰的領導者(管理者)來把握整體的前進方向。

在個人項目中,自己是那個管理者,在結對項目中,兩人都是管理者,而在團隊項目中,PM是主導的管理者,每個人也都參与其中。

為什麼說這個管理者十分重要,因為在多人完成一項任務時,思路統一是很重要的一件事情。每個人都有自己的主意,那樣是無法擰成一股繩來合作的,需要有人來管理和協調,讓大家的想法達成一致,才能使得團隊高效地合作。

同時,管理團隊和管理軟件開發周期也是一門學問。

管理團隊涉及到協調大家不同的意見,盡量不偏不坦,保證每個人的個性的同時又要保證團隊的統一。要能夠充分發揮每個人的特點,盡量滿足每個人的愛好和想法,這本身就是一項十分有挑戰的事情。

而管理軟件開發周期更甚,軟件開發涉及到多個環節,每個環節都有每個環節的任務和特點,在每個階段都指定明確的目標對於按期完成軟件開發而言有十分重要的意義。

同時,軟件開發不僅是技術的挑戰,也是設計的挑戰。

高超的技術可以幫助程序員實現功能,但是並不能幫助程序員設計出優秀的產品。軟件開發往往細節之處見真功夫,這種功夫不一定是實現難度有多高,往往是設計思想上的巧妙。優秀的設計可以讓產品更加易用,更加具有粘性,讓用戶更加依賴於產品。

這一點我在我們的項目中深有體會。我們的IDE主打易用,所以在很多地方的設計上都是精雕細琢,如功能的布局、UI的設計、項目的入口等等,都力求讓用戶能夠快速上手,長期使用。

此外,我也有一些想進行反思的地方。

首先是和大家的交流方式上,我覺得我一直存在一定的問題,同時,這也是團隊合作中十分重要的地方。團隊合作,大家不僅僅只是簡單的在一起做個東西,人際層面的往來對團隊的建設也十分重要,良好的交流方式有利於提高團隊的凝聚力,營造良好的團隊氛圍。在這一點上,我覺得我做的還不夠,有時會將個人情緒遷怒到他人,也是感謝大家對我的包容吧,能夠讓團隊的合作一直很愉快。

還有就是缺乏思考,尤其是設計上的思考。好的軟件開發人員會設計優秀的接口和服務,讓使用者一看就能覺出這是大家之作,方便易用的同時功能全面。這一點上我覺得我做的還不夠,很多時候都是功能有了就可以了,而不再進一步考慮如何優化接口,優化API設計,讓調用者更加方便地使用接口與服務,這一點在未來的軟件開發設計上也是需要提高的。

總結起來說,這一學期的軟工實踐體驗是很充實的。從單人項目到結對項目再到最終的團隊項目,實踐了不同模式下的開發過程,也最終取得了一個小有規模的產品,無論是過程還是結果都值得欣慰。同時,通過一系列的實踐,我也深刻體會到了團隊大型軟件開發的難度和痛點,也為將來的進一步學習和發展奠定了基礎、明確了方向,從這些角度上講,都是十分有益的。希望這個學期的實踐可以成為未來軟件開發生涯的一個好的開端。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

熱浪再襲歐 德比荷法熱到40度 法德核電廠被迫停機

摘錄自2019年7月24、26日自由時報、中央社報導

今年夏天的第二波熱浪,25日讓歐洲多國氣溫再創新高,不少城市都測到超過攝氏40度的高溫。荷蘭25日在東部城鎮代倫(Deelen)測得破紀錄的攝氏41.7度高溫。比利時25日在東北部的小布羅赫爾空軍基地測到40.6度,為該國自1833年以來的最高溫。德國25日在西部林根(Lingen)測到41.5度。

法國巴黎25日創下史上最高溫,該市蒙蘇里(Montsouris)區下午測到42.4度的高溫。

熱浪也迫使南法一座核電廠於23日起停機至月底。

依賴海水冷卻反應爐的核電廠受熱浪影響,法國電力公司(EDF)表示,全法國的核電廠25日發電量減少約5.2十億瓦(GW)或8%,南部塔恩-加倫省(Tarn-et-Garonne)的戈費契(Golfech)核電廠,因加倫河(Garonne River)水溫過高,2個反應爐分別於23日起停機,直到本月30日。另有6座核反應爐發電量縮減。

德國電力公用事業公司意昂(E.ON)旗下核電公司PreussenElektra 26日表示,由於威塞河(Weser River)水溫過高,發電量1430 MW的格隆德(Grohnde)核電廠預計26日中午起至28日暫停運轉。若氣候改變可能調整計畫。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

保育有成 長鬚鯨和山地大猩猩數量回穩

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

小師妹學JVM之:深入理解JIT和編譯優化-你看不懂系列

目錄

  • 簡介
  • JIT編譯器
  • Tiered Compilation分層編譯
  • OSR(On-Stack Replacement)
  • Deoptimization
  • 常見的編譯優化舉例
    • Inlining內聯
    • Branch Prediction分支預測
    • Loop unswitching
    • Loop unrolling展開
    • Escape analysis逃逸分析
  • 總結

簡介

小師妹已經學完JVM的簡單部分了,接下來要進入的是JVM中比較晦澀難懂的概念,這些概念是那麼的枯燥乏味,甚至還有點惹人討厭,但是要想深入理解JVM,這些概念是必須的,我將會盡量嘗試用簡單的例子來解釋它們,但一定會有人看不懂,沒關係,這個系列本不是給所有人看的。

更多精彩內容且看:

  • 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
  • Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
  • Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
  • java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程

JIT編譯器

小師妹:F師兄,我的基礎已經打牢了嗎?可以進入這麼複雜的內容環節了嗎?

小師妹不試試怎麼知道不行呢?了解點深入內容可以幫助你更好的理解之前的知識。現在我們開始吧。

上次我們在講java程序的處理流程的時候,還記得那通用的幾步吧。

小師妹:當然記得了,編寫源代碼,javac編譯成字節碼,加載到JVM中執行。

對,其實在JVM的執行引擎中,有三個部分:解釋器,JIT編譯器和垃圾回收器。

解釋器會將前面編譯生成的字節碼翻譯成機器語言,因為每次都要翻譯,相當於比直接編譯成機器碼要多了一步,所以java執行起來會比較慢。

為了解決這個問題,JVM引入了JIT(Just-in-Time)編譯器,將熱點代碼編譯成為機器碼。

Tiered Compilation分層編譯

小師妹你知道嗎?在JDK8之前,HotSpot VM又分為三種。分別是 client VM, server VM, 和 minimal VM,分別用在客戶端,服務器,和嵌入式系統。

但是隨着硬件技術的發展,這些硬件上面的限制都不是什麼大事了。所以從JDK8之後,已經不再區分這些VM了,現在統一使用VM的實現來替代他們。

小師妹,你覺得Client VM和Server VM的本質區別在哪一部分呢?

小師妹,編譯成字節碼應該都是使用javac,都是同樣的命令,字節碼上面肯定是一樣的。難點是在執行引擎上面的不同?

說的對,因為Client VM和Server VM的出現,所以在JIT中出現了兩種不同的編譯器,C1 for Client VM, C2 for Server VM。

因為javac的編譯只能做少量的優化,其實大量的動態優化是在JIT中做的。C2相對於C1,其優化的程度更深,更加激進。

為了更好的提升編譯效率,JVM在JDK7中引入了分層編譯Tiered compilation的概念。

對於JIT本身來說,動態編譯是需要佔用用戶內存空間的,有可能會造成較高的延遲。

對於Server服務器來說,因為代碼要服務很多個client,所以磨刀不誤砍柴工,短暫的延遲帶來永久的收益,聽起來是可以接受的。

Server端的JIT編譯也不是立馬進行的,它可能需要收集到足夠多的信息之後,才進行編譯。

而對於Client來說,延遲帶來的性能影響就需要進行考慮了。和Server相比,它只進行了簡單的機器碼的編譯。

為了滿足不同層次的編譯需求,於是引入了分層編譯的概念。

大概來說分層編譯可以分為三層:

  1. 第一層就是禁用C1和C2編譯器,這個時候沒有JIT進行。
  2. 第二層就是只開啟C1編譯器,因為C1編譯器只會進行一些簡單的JIT優化,所以這個可以應對常規情況。
  3. 第三層就是同時開啟C1和C2編譯器。

在JDK7中,你可以使用下面的命令來開啟分層編譯:

-XX:+TieredCompilation

而在JDK8之後,恭喜你,分層編譯已經是默認的選項了,不用再手動開啟。

OSR(On-Stack Replacement)

小師妹:F師兄,你剛剛講到Server的JIT不是立馬就進行編譯的,它會等待一定的時間來搜集所需的信息,那麼代碼不是要從字節碼轉換成機器碼?

對的,這個過程就叫做OSR(On-Stack Replacement)。為什麼叫OSR呢?我們知道JVM的底層實現是一個棧的虛擬機,所以這個替換實際上是一系列的Stack操作。

上圖所示,m1方法從最初的解釋frame變成了後面的compiled frame。

Deoptimization

這個世界是平衡的,有陰就有陽,有優化就有反優化。

小師妹:F師兄,為什麼優化了之後還要反優化呢?這樣對性能不是下降了嗎?

通常來說是這樣的,但是有些特殊的情況下面,確實是需要進行反優化的。

下面是比較常見的情況:

  1. 需要調試的情況

如果代碼正在進行單個步驟的調試,那麼之前被編譯成為機器碼的代碼需要反優化回來,從而能夠調試。

  1. 代碼廢棄的情況

當一個被編譯過的方法,因為種種原因不可用了,這個時候就需要將其反優化。

  1. 優化之前編譯的代碼

有可能出現之前優化過的代碼可能不夠完美,需要重新優化的情況,這種情況下同樣也需要進行反優化。

常見的編譯優化舉例

除了JIT編譯成機器碼之外,JIT還有一下常見的代碼優化方式,我們來一一介紹。

Inlining內聯

舉個例子:

int a = 1;
int b = 2;
int result = add(a, b);
...
public int add(int x, int y) { return x + y; }
int result = a + b; //內聯替換

上面的add方法可以簡單的被替換成為內聯表達式。

Branch Prediction分支預測

通常來說對於條件分支,因為需要有一個if的判斷條件,JVM需要在執行完畢判斷條件,得到返回結果之後,才能夠繼續準備後面的執行代碼,如果有了分支預測,那麼JVM可以提前準備相應的執行代碼,如果分支檢查成功就直接執行,省去了代碼準備的步驟。

比如下面的代碼:

// make an array of random doubles 0..1
double[] bigArray = makeBigArray();
for (int i = 0; i < bigArray.length; i++)
{
 double cur = bigArray[i];
 if (cur > 0.5) { doThis();} else { doThat();}
}

Loop unswitching

如果我們在循環語句裏面添加了if語句,為了提升併發的執行效率,可以將if語句從循環中提取出來:

  int i, w, x[1000], y[1000];
  for (i = 0; i < 1000; i++) {
    x[i] += y[i];
    if (w)
      y[i] = 0;
  }

可以改為下面的方式:

  int i, w, x[1000], y[1000];
  if (w) {
    for (i = 0; i < 1000; i++) {
      x[i] += y[i];
      y[i] = 0;
    }
  } else {
    for (i = 0; i < 1000; i++) {
      x[i] += y[i];
    }
  }

Loop unrolling展開

在循環語句中,因為要不斷的進行跳轉,所以限制了執行的速度,我們可以對循環語句中的邏輯進行適當的展開:

 int x;
 for (x = 0; x < 100; x++)
 {
     delete(x);
 }

轉變為:

 int x; 
 for (x = 0; x < 100; x += 5 )
 {
     delete(x);
     delete(x + 1);
     delete(x + 2);
     delete(x + 3);
     delete(x + 4);
 }

雖然循環體變長了,但是跳轉次數變少了,其實是可以提升執行速度的。

Escape analysis逃逸分析

什麼叫逃逸分析呢?簡單點講就是分析這個線程中的對象,有沒有可能會被其他對象或者線程所訪問,如果有的話,那麼這個對象應該在Heap中分配,這樣才能讓對其他的對象可見。

如果沒有其他的對象訪問,那麼完全可以在stack中分配這個對象,棧上分配肯定比堆上分配要快,因為不用考慮同步的問題。

我們舉個例子:

  public static void main(String[] args) {
    example();
  }
  public static void example() {
    Foo foo = new Foo(); //alloc
    Bar bar = new Bar(); //alloc
    bar.setFoo(foo);
  }
}

class Foo {}

class Bar {
  private Foo foo;
  public void setFoo(Foo foo) {
    this.foo = foo;
  }
}

上面的例子中,setFoo引用了foo對象,如果bar對象是在heap中分配的話,那麼引用的foo對象就逃逸了,也需要被分配在heap空間中。

但是因為bar和foo對象都只是在example方法中調用的,所以,JVM可以分析出來沒有其他的對象需要引用他們,那麼直接在example的方法棧中分配這兩個對象即可。

逃逸分析還有一個作用就是lock coarsening。

為了在多線程環境中保證資源的有序訪問,JVM引入了鎖的概念,雖然鎖可以保證多線程的有序執行,但是如果實在單線程環境中呢?是不是還需要一直使用鎖呢?

比如下面的例子:

public String getNames() {
     Vector<String> v = new Vector<>();
     v.add("Me");
     v.add("You");
     v.add("Her");
     return v.toString();
}

Vector是一個同步對象,如果是在單線程環境中,這個同步鎖是沒有意義的,因此在JDK6之後,鎖只在被需要的時候才會使用。

這樣就能提升程序的執行效率。

總結

本文介紹了JIT的原理和一些基本的優化方式。後面我們會繼續探索JIT和JVM的秘密,敬請期待。

本文作者:flydean程序那些事

本文鏈接:http://www.flydean.com/jvm-jit-in-detail/

本文來源:flydean的博客

歡迎關注我的公眾號:程序那些事,更多精彩等着您!

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

新型液流電池可發電與供氫,電動車與氫燃料車都適用

電池電動車與氫燃料電池車都有望成為新一代交通主力,但這兩種車款各採用不同的「充電方式」,一種是電力、一種是補充氫氣,各國得針對兩種不同的車系分別打造管線與「加油站」,而近日英國格拉斯哥大學打造新型液流電池,不僅可讓汽車在幾秒內完成燃料補充,還可以釋放電力與氫氣、完美解決兩種電動車系統不相容的狀況。

液流電池(flow battery)由兩個電解質槽組成,充放電時電解質會被幫補到中間的發電室,而發電室也會以薄膜隔開兩種溶液、形成兩個電極,最後產生離子交換來發電,而由於兩種電解質是分開存放,不會有電解質相互滲漏與自身放電等安全性問題,是一種良好的儲能生力軍。

只是液流電池體積龐大,即使該電池具有安全性與穩定性高等優點,仍不適合用於 3C 產品與電動車,目前大多研究團隊都是想把液流電池用在再生能源儲能系統。

而格拉斯哥大學這次想將突破以往液流電池無法用在汽車的印象,並成功透過奈米粒子溶液打造新型液流電池,其中團隊所用的電解質是一種奈米懸浮液(suspension),每個奈米粒子都可以當成一顆小型電池,儲存能量更是一般液流電池的 10 倍,還能以電力或氫氣的形式釋放。

且由於液流電池主要以液態電解質驅動,團隊更指出,新型液流電池可在幾秒內完成移除舊液體、補充新電解質,因此該系統的「充電」時間可跟一般汽油車一樣,大大縮短電動車的充電速度。

格拉斯哥大學 Regius Chair of Chemistry 教授 Leroy(Lee)Cronin 表示,若再生能源想要有效運作,還需要儲存容量、靈活性高的儲能系統來幫忙解決間歇性能源與電力尖峰等問題,而團隊提出的新型化學充電方式,除了可用在儲能系統,還可應用在電動車中。

該研究將有助於未來液流電池的應用,有望縮短液流電池與大規模商業化的距離。團隊也指出,新型液流電池的能量密度相當高,可提升將來電動車的續航里程與儲能系統的儲存容量,目前研究已發表在《》。

(首圖來源:。文/DaisyChuang)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準