偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

性能優(yōu)化的七大殺手锏!

開發(fā) 前端
今天為大家從代碼復(fù)用、計(jì)算性能、結(jié)果集優(yōu)化、資源沖突優(yōu)化、算法優(yōu)化、高效實(shí)現(xiàn)和JVM優(yōu)化等方面介紹了性能優(yōu)化的可行方案和注意事項(xiàng)。希望小伙伴們能夠從中學(xué)到對(duì)自己有用的知識(shí)。

性能優(yōu)化可分為業(yè)務(wù)優(yōu)化和技術(shù)優(yōu)化兩類。業(yè)務(wù)優(yōu)化雖能帶來顯著效果,但主要屬于產(chǎn)品和管理范疇。作為程序員,日常工作中的優(yōu)化多依靠技術(shù)手段達(dá)成既定的優(yōu)化目標(biāo)。以下為大家詳細(xì)介紹7種常見的技術(shù)優(yōu)化手段。

圖片圖片

代碼復(fù)用優(yōu)化

在編寫代碼時(shí),我們常常會(huì)發(fā)現(xiàn)許多重復(fù)代碼。將這些代碼提取出來,封裝成公共方法,下次使用時(shí)就無需重新編寫,這就是復(fù)用思想在編碼邏輯上的體現(xiàn)。在數(shù)據(jù)存取方面,同樣存在復(fù)用情況。

在軟件系統(tǒng)里,數(shù)據(jù)復(fù)用常涉及緩沖和緩存。需注意,這兩個(gè)概念有本質(zhì)區(qū)別。

  • 緩沖(Buffer):常用于數(shù)據(jù)的暫存,然后進(jìn)行批量傳輸或?qū)懭耄嗖捎庙樞蚍绞?,旨在緩解不同設(shè)備間頻繁、緩慢的隨機(jī)寫操作,主要針對(duì)寫操作。
  • 緩存(Cache):對(duì)已讀取數(shù)據(jù)的復(fù)用,通過將數(shù)據(jù)存儲(chǔ)在高速區(qū)域,以加快后續(xù)讀取速度,主要針對(duì)讀操作。

此外,對(duì)象池化操作也是復(fù)用的一種形式,如數(shù)據(jù)庫連接池、線程池等,在Java中應(yīng)用廣泛。由于這些對(duì)象的創(chuàng)建和銷毀成本較高,使用后將其暫時(shí)存儲(chǔ),下次使用時(shí)無需進(jìn)行耗時(shí)的初始化操作。

計(jì)算性能優(yōu)化

并行執(zhí)行

如今,大多數(shù)硬件采用多核CPU。為加快任務(wù)執(zhí)行速度,并行執(zhí)行是最優(yōu)選擇。并行執(zhí)行主要有以下三種模式:

  • 多機(jī)并行:通過負(fù)載均衡,將流量或大型計(jì)算任務(wù)拆分為多個(gè)部分,同時(shí)進(jìn)行處理。例如,Hadoop利用MapReduce將任務(wù)分散到多臺(tái)機(jī)器上并行計(jì)算。大流量系統(tǒng)通過負(fù)載均衡器將流量分擔(dān)到后端服務(wù)的多個(gè)節(jié)點(diǎn)上執(zhí)行。
  • 多進(jìn)程并行:以Nginx為例,采用NIO編程模型,Master統(tǒng)一管理Worker進(jìn)程,由Worker進(jìn)程負(fù)責(zé)請(qǐng)求代理,充分利用硬件的多個(gè)CPU。
  • 多線程并行:這是Java程序員常用的方式。如Netty采用Reactor編程模型,基于線程實(shí)現(xiàn)。Boss線程接收請(qǐng)求,然后調(diào)度給Worker線程進(jìn)行業(yè)務(wù)計(jì)算。此外,Golang的協(xié)程比線程更輕量級(jí),本質(zhì)上也是利用多核實(shí)現(xiàn)任務(wù)并行執(zhí)行。

同步轉(zhuǎn)異步

將同步操作改為異步操作,通常需要改變編程模型。同步請(qǐng)求會(huì)一直阻塞,直到返回成功或失敗結(jié)果。雖然編程模型簡單,但在應(yīng)對(duì)突發(fā)、時(shí)間段傾斜的流量時(shí),容易導(dǎo)致請(qǐng)求失敗。而異步操作支持橫向擴(kuò)容,能緩解瞬時(shí)壓力,使請(qǐng)求更加平滑。

惰性加載

利用常見的設(shè)計(jì)模式,如單例模式、代理模式等,可以優(yōu)化業(yè)務(wù)并提升用戶體驗(yàn)。例如,在進(jìn)行UI編程時(shí),若要顯示大量圖片,可先加載占位符,再通過后臺(tái)線程逐步加載所需資源,避免窗口僵死。

結(jié)果集優(yōu)化

以XML和JSON為例,JSON不僅書寫簡單,而且體積更小,傳輸和解析效率更高。Google的Protobuf體積更小,雖可讀性降低,但在高并發(fā)場景(如RPC)中能顯著提高效率,這是結(jié)果集優(yōu)化的典型案例。

在C/S模式的Web服務(wù)中,數(shù)據(jù)從服務(wù)器傳輸?shù)娇蛻舳诵枰职l(fā)多份,減少數(shù)據(jù)存儲(chǔ)量能顯著提升傳輸性能并降低成本。例如,Nginx通常會(huì)開啟GZIP壓縮,使傳輸內(nèi)容更加緊湊,客戶端只需少量計(jì)算能力即可解壓。

結(jié)果集優(yōu)化的一般思路是保持返回?cái)?shù)據(jù)的精簡,去除客戶端不需要的字段。對(duì)于時(shí)效性要求不高但處理能力要求高的業(yè)務(wù),可采用批量處理方式,減少網(wǎng)絡(luò)連接交互。此外,對(duì)數(shù)據(jù)集合進(jìn)行處理優(yōu)化,如使用索引或Bitmap位圖,可加快數(shù)據(jù)訪問速度。

資源沖突優(yōu)化

開發(fā)中會(huì)涉及多種共享資源,包括單機(jī)資源(如HashMap)、外部存儲(chǔ)(如數(shù)據(jù)庫行)、單個(gè)資源(如Redis的Setnx)以及多個(gè)資源的協(xié)調(diào)(如事務(wù)、分布式事務(wù))。性能問題與鎖密切相關(guān),如數(shù)據(jù)庫的行鎖、表鎖,Java中的各種鎖,以及底層的CPU命令級(jí)鎖、JVM指令級(jí)鎖和操作系統(tǒng)內(nèi)部鎖等。

并發(fā)會(huì)導(dǎo)致資源沖突,解決方法是加鎖。事務(wù)本質(zhì)上也是一種鎖。鎖可分為樂觀鎖和悲觀鎖,樂觀鎖效率更高;還可分為公平鎖和非公平鎖,在任務(wù)調(diào)度上略有差異。對(duì)無鎖隊(duì)列的研究也能顯著提升性能。

算法優(yōu)化

算法能顯著提升復(fù)雜業(yè)務(wù)的性能,實(shí)際業(yè)務(wù)中常使用算法的變種。在CPU緊張的業(yè)務(wù)中,為加快處理速度,常采用空間換時(shí)間的策略。

算法優(yōu)化屬于代碼調(diào)優(yōu),需要熟悉所使用語言的API,靈活運(yùn)用算法和數(shù)據(jù)結(jié)構(gòu)。常見的降低時(shí)間復(fù)雜度的方法有遞歸、二分、排序、動(dòng)態(tài)規(guī)劃等。不同的實(shí)現(xiàn)方式對(duì)系統(tǒng)性能影響巨大,如LinkedList和ArrayList在隨機(jī)訪問性能上差異明顯,CopyOnWriteList在讀多寫少場景下能降低鎖沖突。

高效實(shí)現(xiàn)

編程時(shí)應(yīng)盡量使用設(shè)計(jì)理念良好、性能優(yōu)越的組件。例如,有了Netty就不應(yīng)再選擇較老的Mina組件;設(shè)計(jì)系統(tǒng)時(shí),應(yīng)避免使用SOAP這種耗時(shí)的協(xié)議;使用JavaCC等語法分析器比正則表達(dá)式效率更高。

若通過測試分析找到系統(tǒng)瓶頸,應(yīng)使用更高效的組件替換關(guān)鍵組件。適配器模式在這種情況下非常重要,許多公司會(huì)在現(xiàn)有組件上進(jìn)行抽象封裝,以便在底層組件切換時(shí),上層應(yīng)用不受影響。

JVM優(yōu)化

Java程序運(yùn)行在JVM虛擬機(jī)上,其性能受JVM制約。合理優(yōu)化JVM參數(shù)能提升Java程序性能,參數(shù)配置不當(dāng)可能導(dǎo)致OOM等嚴(yán)重問題。

目前,G1垃圾回收器應(yīng)用廣泛,通過少量參數(shù)配置即可實(shí)現(xiàn)高效內(nèi)存回收。CMS垃圾回收器已在Java 14中被移除,因其GC時(shí)間不可控,應(yīng)盡量避免使用。

JVM性能調(diào)優(yōu)需綜合考慮各方面因素,了解JVM內(nèi)部運(yùn)行原理有助于深入理解代碼,編寫更高效的程序。

總結(jié)

今天為大家從代碼復(fù)用、計(jì)算性能、結(jié)果集優(yōu)化、資源沖突優(yōu)化、算法優(yōu)化、高效實(shí)現(xiàn)和JVM優(yōu)化等方面介紹了性能優(yōu)化的可行方案和注意事項(xiàng)。希望小伙伴們能夠從中學(xué)到對(duì)自己有用的知識(shí)。

責(zé)任編輯:武曉燕 來源: 冰河技術(shù)
相關(guān)推薦

2019-04-22 08:07:31

MySQL數(shù)據(jù)庫索引

2011-07-04 10:00:02

虛擬化

2011-06-29 10:08:24

服務(wù)器虛擬化解決方案

2010-01-15 09:43:49

Windows 7殺手

2015-06-15 14:48:21

蘋果iOS9軟實(shí)力

2010-03-23 17:06:01

2022-02-25 08:55:19

BitMapRedis面試題

2019-08-29 10:46:42

2022-02-10 09:04:18

RediSDS數(shù)據(jù)結(jié)構(gòu)

2014-12-01 15:20:36

微信點(diǎn)評(píng)商家

2018-04-19 09:10:17

數(shù)據(jù)分析列式存儲(chǔ)

2020-02-19 13:39:14

操作系統(tǒng)WindowsLinux

2011-12-20 10:16:49

2015-08-11 14:38:34

2011-06-27 22:08:42

臺(tái)式機(jī)評(píng)測

2021-02-22 09:01:13

Redis宕機(jī)日志

2021-03-18 10:31:27

Redis宕機(jī)日志

2013-08-13 09:07:20

大數(shù)據(jù)

2010-01-18 17:02:06

2025-02-24 08:10:00

C#代碼開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)