埃及艷后Cleopatra,很小的時(shí)候看過(guò)媽媽買的一本書里把她的名字翻譯成克婁巴特拉,里面有很多描寫她美貌的場(chǎng)景描寫。然而這個(gè)以美貌著稱的奇女子,我看到書里,凱撒和安東尼真正傾心的是Cleopatra背后的埃及文明及Cleopatra的智慧。羅馬是個(gè)好戰(zhàn)的國(guó)家,人民沒有很多的精力去創(chuàng)造各種文明和手工藝品。而Cleapatra在這些大佬面前的出場(chǎng),總結(jié)兩個(gè)字:“華麗”。這種華麗會(huì)讓羅馬這些篡位的暴發(fā)戶首領(lǐng)眼前一亮。在柏林,有全世界最好的艷后肖像。她的頭發(fā)結(jié)的是個(gè)簡(jiǎn)單的發(fā)髻,風(fēng)格樸實(shí),鼻子是稍有點(diǎn)長(zhǎng)的鷹鉤鼻,嘴也算不上性感,沒有耳環(huán),沒有項(xiàng)鏈。并非一個(gè)性感尤物的相貌。我可以理解。可以理解她坐在金碧輝煌的豪華大船的中央,穿著絢麗,體態(tài)驕傲而高貴,旁邊是面貌平常的修女來(lái)反襯她的美,那是政治。而留給后人的肖像,作為一個(gè)女孩子更想讓人記住的,是更內(nèi)在本質(zhì)的東西。古代資料記載,她聰明,詼諧,精通多種語(yǔ)言,喜愛學(xué)習(xí)和閱讀,還有驚人的毅力。后人評(píng)價(jià)說(shuō):“如果Cleopatra的鼻子再塌一點(diǎn),世界的面貌將會(huì)改變。” 我想,其實(shí)智慧才是她最可貴的資產(chǎn)。
部門開會(huì)討論方案。經(jīng)常有一個(gè)很可愛的現(xiàn)象:“方案講解過(guò)程中,會(huì)被其他人批的體無(wú)完膚,但是最后該做的還是會(huì)做。”事情就是這樣,批判只是為了提醒實(shí)施過(guò)程該注意的問(wèn)題,可能會(huì)有性能問(wèn)題,一致性問(wèn)題,并發(fā)問(wèn)題,可能需要怎樣解決。但是提意見的人往往沒有決定權(quán),因?yàn)橛袀€(gè)真理叫做:“你試過(guò)嗎?”。然而這種討論會(huì)要先參加,提出自己的意見,然后看著過(guò)程的實(shí)施,檢驗(yàn)自己的想法,是很有利于提高的。沒有提意見的理論基礎(chǔ),沒有意見可提,最終開會(huì)都不會(huì)讓你來(lái)參加的話,可能工作很多年也只是會(huì)做項(xiàng)目而已。不過(guò)就我自己而言,現(xiàn)在的問(wèn)題是一切從技術(shù)角度出發(fā),應(yīng)該多從業(yè)務(wù)和數(shù)據(jù)分析的角度整體,大局的重新審視一些目前的工作。終于有借口明天找我家微微一笑很傾城的男神老大聊聊天了。
提到性能,先看看存儲(chǔ)數(shù)據(jù)的六個(gè)區(qū)域:
1>寄存器:這是最快的存儲(chǔ)設(shè)備,因?yàn)樗鼘?shí)際上在處理器內(nèi)部,就是平時(shí)說(shuō)的CPU。在Java內(nèi)存模型中,所謂的工作內(nèi)存就是將主內(nèi)存的數(shù)據(jù)拷貝一些到寄存器中來(lái)提高計(jì)算速度。
2>棧:這個(gè)存在于隨機(jī)存取存儲(chǔ)器區(qū)。其硬件基礎(chǔ)是內(nèi)存條。記得我以前在人人的時(shí)候,有時(shí)候臺(tái)式機(jī)開不了機(jī)了,我有快捷解決方案:“向主機(jī)箱踢兩腳?!闭娴暮檬古?,因?yàn)殚_不了機(jī)是因?yàn)閮?nèi)存條松了。后來(lái)踢也不好使了,我就把機(jī)箱蓋兒打開手動(dòng)把內(nèi)存條緊了緊。好了,通過(guò)這個(gè)例子大家應(yīng)該明白了,如果沒有內(nèi)存條,是開不了機(jī)的。這個(gè)速度僅次于寄存器的設(shè)備通過(guò)寄存器中的棧指針與寄存器直接交互。其實(shí)一段程序的所有元素的生命周期都存于棧中,包括對(duì)象的引用。
3>堆:通常說(shuō)的內(nèi)存池主要是指這部分,主要存儲(chǔ)Java對(duì)象。不同于Java棧,編譯器不需要知道堆中的東西要存儲(chǔ)多長(zhǎng)時(shí)間,所以有它的靈活性。這種動(dòng)態(tài)分配導(dǎo)致其分配和回收都需要比棧更長(zhǎng)的時(shí)間。
4>直接內(nèi)存:直接內(nèi)存并不是虛擬機(jī)內(nèi)存的一部分,jdk1.4中引入NIO,引入了通道與緩沖區(qū)的IO方式,它可以調(diào)用Native方法直接分配堆外內(nèi)存,這個(gè)堆外內(nèi)存就是本機(jī)內(nèi)存,不會(huì)影響到堆內(nèi)存的大小。
5>只讀存儲(chǔ)器:安卓手機(jī)都用這個(gè)東西來(lái)存放應(yīng)用。因?yàn)閼?yīng)用一經(jīng)安裝,就不再改變。像我這種做服務(wù)器端開發(fā)的,這個(gè)不詳細(xì)介紹。
6>磁盤:Java是在C++上開發(fā)的,但是有更多限制。不能像C++一樣控制堆的分配,自己在棧中給對(duì)象分配空間,更不能建議編輯器給寄存器分配空間。但是Java對(duì)磁盤的存取卻是用程序直接控制的。Java可以讓對(duì)象持久化,同時(shí)這些對(duì)象也可以恢復(fù)成一個(gè)普通的隨機(jī)存儲(chǔ)儲(chǔ)存器中的對(duì)象。Java提供了輕量級(jí)持久化的支持,而JDBC和Hibernate在數(shù)據(jù)庫(kù)中提供了更為精細(xì)的存儲(chǔ)支持。
7>其他機(jī)器:Java有一種叫流對(duì)象,是將對(duì)象轉(zhuǎn)換為比特流來(lái)傳輸?shù)狡渌O(shè)備。和持久化對(duì)象一樣,流對(duì)象也可以恢復(fù)成普通對(duì)象。
大家知道基本的數(shù)據(jù)類型在方法內(nèi)執(zhí)行的時(shí)候都是直接值拷貝到棧當(dāng)中。當(dāng)然它也可以包裝成非基本類型存到堆中。方法調(diào)用時(shí)像其他對(duì)象一樣只取它的引用。自動(dòng)拆裝包嘛。其中數(shù)字的類型都是帶符號(hào)的。Java提供兩種高精度的數(shù)值類型,BigInteger和BigDecimal,它們沒有對(duì)應(yīng)的基本數(shù)據(jù)類型。計(jì)算都要調(diào)用對(duì)象的方法,而不能直接使用運(yùn)算符。當(dāng)然這個(gè)要慢,就是所謂的用速度換精準(zhǔn)度。我之前創(chuàng)業(yè)的生鮮網(wǎng)項(xiàng)目(已經(jīng)創(chuàng)業(yè)失敗了)因?yàn)樯婕昂芏噱X的東西,大量用到這種數(shù)據(jù)類型。說(shuō)到數(shù)據(jù)類型,大家都知道成員變量都會(huì)有一個(gè)默認(rèn)值,而局部變量沒有。其實(shí)只要知道JVM原理就能明白:成員變量都需要在方法區(qū)中為其預(yù)先分配空間。而局部變量只是在棧中用到,所以沒有默認(rèn)值。