Java內(nèi)存模型與優(yōu)化_第1頁(yè)
Java內(nèi)存模型與優(yōu)化_第2頁(yè)
Java內(nèi)存模型與優(yōu)化_第3頁(yè)
Java內(nèi)存模型與優(yōu)化_第4頁(yè)
Java內(nèi)存模型與優(yōu)化_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)智創(chuàng)新變革未來(lái)Java內(nèi)存模型與優(yōu)化Java內(nèi)存模型概述內(nèi)存模型中的順序一致性happens-before規(guī)則volatile關(guān)鍵字的應(yīng)用synchronized關(guān)鍵字的應(yīng)用Java內(nèi)存模型的優(yōu)化策略JMM優(yōu)化實(shí)例分析總結(jié)與展望ContentsPage目錄頁(yè)Java內(nèi)存模型概述Java內(nèi)存模型與優(yōu)化Java內(nèi)存模型概述Java內(nèi)存模型的定義和重要性1.Java內(nèi)存模型是一種規(guī)范,定義了Java程序中線程之間的內(nèi)存訪問(wèn)行為。2.它確保了Java程序在各種硬件和操作系統(tǒng)平臺(tái)上的一致性和正確性。3.理解Java內(nèi)存模型對(duì)于開(kāi)發(fā)高效、并發(fā)、安全的Java應(yīng)用程序至關(guān)重要。Java內(nèi)存模型的組成和結(jié)構(gòu)1.Java內(nèi)存模型由主內(nèi)存和工作內(nèi)存組成。2.主內(nèi)存存儲(chǔ)共享變量,工作內(nèi)存存儲(chǔ)線程本地的變量。3.工作內(nèi)存與主內(nèi)存之間的交互遵循特定的協(xié)議和規(guī)則。Java內(nèi)存模型概述Java內(nèi)存模型中的原子性、可見(jiàn)性和有序性1.原子性:確保某些操作以原子方式執(zhí)行,不會(huì)被其他線程中斷。2.可見(jiàn)性:保證一個(gè)線程對(duì)共享變量的修改對(duì)其他線程是可見(jiàn)的。3.有序性:規(guī)定了指令執(zhí)行的順序,以確保程序行為的正確性。Java內(nèi)存模型的happens-before關(guān)系1.happens-before關(guān)系是Java內(nèi)存模型的核心概念,保證了操作的順序性。2.如果操作A在操作B之前發(fā)生,那么操作A的結(jié)果對(duì)操作B可見(jiàn)。3.happens-before關(guān)系可以通過(guò)synchronized、volatile等關(guān)鍵字建立。Java內(nèi)存模型概述Java內(nèi)存模型的優(yōu)化策略和最佳實(shí)踐1.使用volatile關(guān)鍵字確保變量的可見(jiàn)性。2.使用synchronized關(guān)鍵字保證代碼塊的原子性和可見(jiàn)性。3.使用final關(guān)鍵字確保變量的初始化安全性。4.使用threadlocal變量減少線程間的數(shù)據(jù)競(jìng)爭(zhēng)。Java內(nèi)存模型的未來(lái)發(fā)展和趨勢(shì)1.隨著多核處理器和并發(fā)編程的普及,Java內(nèi)存模型將繼續(xù)發(fā)揮重要作用。2.未來(lái)Java版本可能會(huì)進(jìn)一步優(yōu)化內(nèi)存模型,提高并發(fā)性能和安全性。3.開(kāi)發(fā)者需要持續(xù)關(guān)注Java內(nèi)存模型的最新動(dòng)態(tài),以適應(yīng)不斷變化的硬件和軟件環(huán)境。內(nèi)存模型中的順序一致性Java內(nèi)存模型與優(yōu)化內(nèi)存模型中的順序一致性1.順序一致性是一種內(nèi)存模型,定義了多線程環(huán)境中內(nèi)存訪問(wèn)的一致性行為。2.在順序一致性模型中,所有線程看到的內(nèi)存操作順序是一致的,就像這些操作按照某個(gè)固定的順序一個(gè)接一個(gè)地執(zhí)行一樣。3.順序一致性為程序員提供了一個(gè)強(qiáng)大的抽象,簡(jiǎn)化了多線程編程的復(fù)雜性。順序一致性的重要性1.順序一致性確保了并發(fā)程序的正確性,避免了由于內(nèi)存訪問(wèn)順序不一致導(dǎo)致的數(shù)據(jù)不一致問(wèn)題。2.順序一致性提供了良好的可理解性和可預(yù)測(cè)性,使程序員能夠更容易地理解和控制并發(fā)程序的行為。順序一致性的定義內(nèi)存模型中的順序一致性順序一致性的實(shí)現(xiàn)方式1.通過(guò)使用內(nèi)存屏障或原子指令等硬件機(jī)制來(lái)實(shí)現(xiàn)順序一致性。2.軟件層面也可以通過(guò)鎖、原子操作等手段來(lái)保證順序一致性。順序一致性與性能1.保證順序一致性可能會(huì)帶來(lái)一定的性能開(kāi)銷(xiāo),因?yàn)樾枰讲煌€程之間的內(nèi)存訪問(wèn)操作。2.在設(shè)計(jì)并發(fā)程序時(shí),需要在保證正確性的前提下,盡可能地優(yōu)化性能。內(nèi)存模型中的順序一致性現(xiàn)代硬件對(duì)順序一致性的影響1.現(xiàn)代硬件通常采用緩存一致性協(xié)議來(lái)實(shí)現(xiàn)順序一致性,比如MESIF協(xié)議。2.硬件的發(fā)展不斷優(yōu)化了順序一致性的實(shí)現(xiàn)方式,提高了并發(fā)程序的性能。順序一致性的未來(lái)發(fā)展1.隨著多核、異構(gòu)計(jì)算等技術(shù)的不斷發(fā)展,順序一致性模型將繼續(xù)發(fā)揮重要作用。2.未來(lái)的研究將更多地關(guān)注如何在保證順序一致性的前提下,提高并發(fā)程序的性能和可擴(kuò)展性。happens-before規(guī)則Java內(nèi)存模型與優(yōu)化happens-before規(guī)則happens-before規(guī)則的定義1.happens-before規(guī)則是Java內(nèi)存模型的核心概念,用于描述多線程訪問(wèn)共享變量時(shí)的可見(jiàn)性和順序性。2.如果一個(gè)操作的結(jié)果需要對(duì)另一個(gè)操作可見(jiàn),那么這兩個(gè)操作之間必須存在happens-before關(guān)系。3.happens-before規(guī)則保證了多線程程序的正確性和一致性。happens-before規(guī)則的實(shí)現(xiàn)方式1.通過(guò)volatile關(guān)鍵字保證變量的可見(jiàn)性,建立happens-before關(guān)系。2.通過(guò)synchronized關(guān)鍵字保證同一時(shí)刻只有一個(gè)線程可以訪問(wèn)共享資源,建立happens-before關(guān)系。3.通過(guò)final關(guān)鍵字保證變量初始化操作的順序性,建立happens-before關(guān)系。happens-before規(guī)則happens-before規(guī)則與并發(fā)編程1.在并發(fā)編程中,需要遵循h(huán)appens-before規(guī)則來(lái)保證多線程訪問(wèn)共享變量的正確性。2.通過(guò)理解happens-before規(guī)則,可以避免常見(jiàn)的并發(fā)問(wèn)題,如死鎖、競(jìng)態(tài)條件等。3.在設(shè)計(jì)并發(fā)程序時(shí),需要根據(jù)業(yè)務(wù)需求和性能要求合理選擇使用happens-before規(guī)則的實(shí)現(xiàn)方式。happens-before規(guī)則的優(yōu)化策略1.通過(guò)減少不必要的同步操作來(lái)優(yōu)化happens-before規(guī)則的使用,提高程序的性能。2.采用樂(lè)觀鎖等技術(shù)來(lái)避免并發(fā)沖突,減少happens-before關(guān)系的數(shù)量。3.使用原子類(lèi)來(lái)簡(jiǎn)化多線程編程,提高代碼的可讀性和可維護(hù)性。happens-before規(guī)則1.隨著多核處理器的普及和分布式系統(tǒng)的發(fā)展,happens-before規(guī)則的重要性日益凸顯。2.新的編程模型和內(nèi)存模型不斷涌現(xiàn),為happens-before規(guī)則的研究和應(yīng)用提供了新的思路和方法。3.未來(lái),需要繼續(xù)深入研究happens-before規(guī)則,提高并發(fā)程序的性能和正確性。以上是關(guān)于Java內(nèi)存模型中的happens-before規(guī)則的介紹,希望能夠幫助到您。happens-before規(guī)則的發(fā)展趨勢(shì)volatile關(guān)鍵字的應(yīng)用Java內(nèi)存模型與優(yōu)化volatile關(guān)鍵字的應(yīng)用volatile關(guān)鍵字的定義和作用1.volatile是Java中的一個(gè)關(guān)鍵字,用于聲明變量為"易變的",確保多線程環(huán)境下變量的可見(jiàn)性。2.volatile關(guān)鍵字可以保證變量在內(nèi)存中的實(shí)時(shí)同步,避免由于緩存不一致導(dǎo)致的數(shù)據(jù)讀取問(wèn)題。3.使用volatile關(guān)鍵字可以避免由于指令重排導(dǎo)致的順序問(wèn)題,保證代碼的執(zhí)行順序符合預(yù)期。volatile關(guān)鍵字的適用場(chǎng)景1.volatile關(guān)鍵字適用于多線程環(huán)境下共享變量的修改操作。2.volatile關(guān)鍵字可以用于實(shí)現(xiàn)輕量級(jí)的同步機(jī)制,避免使用鎖帶來(lái)的額外開(kāi)銷(xiāo)。3.在需要保證變量可見(jiàn)性和禁止指令重排的場(chǎng)景下,可以使用volatile關(guān)鍵字。volatile關(guān)鍵字的應(yīng)用volatile與synchronized的區(qū)別1.volatile關(guān)鍵字主要用于保證變量的可見(jiàn)性和禁止指令重排,而synchronized關(guān)鍵字用于實(shí)現(xiàn)同步機(jī)制。2.synchronized關(guān)鍵字可以保證原子性和可見(jiàn)性,而volatile關(guān)鍵字只能保證可見(jiàn)性和禁止指令重排。3.在需要保證原子性的場(chǎng)景下,應(yīng)該使用synchronized關(guān)鍵字而不是volatile關(guān)鍵字。volatile的實(shí)現(xiàn)原理1.volatile關(guān)鍵字的實(shí)現(xiàn)原理是通過(guò)內(nèi)存屏障和禁止指令重排來(lái)實(shí)現(xiàn)的。2.內(nèi)存屏障可以保證變量的可見(jiàn)性,確保修改操作可以立即同步到主內(nèi)存中。3.禁止指令重排可以保證代碼的執(zhí)行順序符合預(yù)期,避免出現(xiàn)順序問(wèn)題。volatile關(guān)鍵字的應(yīng)用volatile的使用注意事項(xiàng)1.volatile關(guān)鍵字并不能保證復(fù)合操作的原子性,需要額外的同步機(jī)制來(lái)保證。2.在使用volatile關(guān)鍵字時(shí)需要注意變量的修飾符,確保正確使用volatile關(guān)鍵字。3.volatile關(guān)鍵字的性能開(kāi)銷(xiāo)相對(duì)較小,但在大量使用的情況下也會(huì)對(duì)系統(tǒng)性能產(chǎn)生影響,需要進(jìn)行適當(dāng)?shù)膬?yōu)化。volatile的優(yōu)化和發(fā)展趨勢(shì)1.隨著多核處理器的普及和并發(fā)編程的發(fā)展,volatile關(guān)鍵字的使用和優(yōu)化也變得越來(lái)越重要。2.在使用volatile關(guān)鍵字時(shí),需要結(jié)合具體的業(yè)務(wù)場(chǎng)景和數(shù)據(jù)類(lèi)型進(jìn)行優(yōu)化,以提高系統(tǒng)性能和穩(wěn)定性。3.未來(lái),隨著技術(shù)的不斷進(jìn)步和應(yīng)用場(chǎng)景的不斷擴(kuò)展,volatile關(guān)鍵字的應(yīng)用和優(yōu)化也將不斷深入和發(fā)展。synchronized關(guān)鍵字的應(yīng)用Java內(nèi)存模型與優(yōu)化synchronized關(guān)鍵字的應(yīng)用synchronized關(guān)鍵字的基本用法1.synchronized關(guān)鍵字可用于實(shí)例方法和靜態(tài)方法,分別實(shí)現(xiàn)實(shí)例級(jí)別的線程安全和類(lèi)級(jí)別的線程安全。2.在方法聲明中添加synchronized關(guān)鍵字,可以保證同一時(shí)間只有一個(gè)線程可以訪問(wèn)該方法。3.synchronized方法內(nèi)部的線程會(huì)持有該方法的鎖,直到方法執(zhí)行完畢才釋放鎖。synchronized代碼塊的用法1.synchronized代碼塊可以用于指定對(duì)象或類(lèi)的鎖,實(shí)現(xiàn)更細(xì)粒度的線程安全控制。2.在synchronized代碼塊中,只有一個(gè)線程能夠持有指定對(duì)象的鎖或類(lèi)的鎖,其他線程需要等待鎖的釋放。3.使用synchronized代碼塊需要特別注意鎖的粒度,過(guò)細(xì)的粒度會(huì)增加鎖競(jìng)爭(zhēng),過(guò)粗的粒度則可能降低并發(fā)性能。synchronized關(guān)鍵字的應(yīng)用synchronized關(guān)鍵字的實(shí)現(xiàn)原理1.synchronized關(guān)鍵字的實(shí)現(xiàn)基于Java內(nèi)存模型的happens-before原則,保證多線程之間的可見(jiàn)性和順序性。2.在JVM中,synchronized關(guān)鍵字會(huì)通過(guò)monitorenter和monitorexit指令來(lái)獲取和釋放鎖。3.synchronized關(guān)鍵字的性能開(kāi)銷(xiāo)相對(duì)較大,因此在需要高并發(fā)的場(chǎng)景下需要謹(jǐn)慎使用。synchronized關(guān)鍵字的優(yōu)化策略1.可以使用ConcurrentHashMap等并發(fā)容器來(lái)替代synchronized關(guān)鍵字,提高并發(fā)性能。2.可以通過(guò)減少鎖的持有時(shí)間來(lái)優(yōu)化synchronized關(guān)鍵字的性能,例如將鎖的持有范圍縮小到關(guān)鍵代碼段。3.在使用synchronized關(guān)鍵字時(shí),可以考慮使用偏向鎖、輕量級(jí)鎖等鎖優(yōu)化機(jī)制來(lái)提高并發(fā)性能。synchronized關(guān)鍵字的應(yīng)用synchronized關(guān)鍵字的使用場(chǎng)景1.synchronized關(guān)鍵字適用于需要保證線程安全的場(chǎng)景,例如多線程訪問(wèn)共享資源時(shí)。2.在單例模式、生產(chǎn)者-消費(fèi)者模型等場(chǎng)景中,可以使用synchronized關(guān)鍵字來(lái)保證線程安全。3.在需要保證多線程之間順序性的場(chǎng)景下,可以使用synchronized關(guān)鍵字來(lái)實(shí)現(xiàn)可見(jiàn)性和一致性。synchronized關(guān)鍵字的注意事項(xiàng)1.在使用synchronized關(guān)鍵字時(shí),需要注意避免死鎖等線程安全問(wèn)題。2.synchronized關(guān)鍵字的粒度需要根據(jù)具體場(chǎng)景來(lái)權(quán)衡,過(guò)細(xì)或過(guò)粗都可能會(huì)影響性能。3.在使用synchronized關(guān)鍵字時(shí),需要考慮異常處理機(jī)制,避免因異常導(dǎo)致鎖無(wú)法正確釋放。Java內(nèi)存模型的優(yōu)化策略Java內(nèi)存模型與優(yōu)化Java內(nèi)存模型的優(yōu)化策略?xún)?nèi)存分配優(yōu)化1.采用合適的內(nèi)存分配策略,盡可能減少內(nèi)存碎片和頻繁的內(nèi)存分配與回收。2.使用對(duì)象池等技術(shù)來(lái)緩存對(duì)象,避免頻繁創(chuàng)建和銷(xiāo)毀對(duì)象帶來(lái)的性能開(kāi)銷(xiāo)。3.對(duì)于大對(duì)象或數(shù)組,采用分頁(yè)或分塊的方式進(jìn)行內(nèi)存分配,以減少內(nèi)存占用和提高緩存利用率。并發(fā)訪問(wèn)優(yōu)化1.使用volatile關(guān)鍵字保證多線程之間的可見(jiàn)性,避免出現(xiàn)數(shù)據(jù)不一致的情況。2.采用鎖或原子類(lèi)來(lái)保證并發(fā)訪問(wèn)的安全性,避免出現(xiàn)數(shù)據(jù)競(jìng)爭(zhēng)和線程安全問(wèn)題。3.使用并發(fā)容器等數(shù)據(jù)結(jié)構(gòu)來(lái)優(yōu)化并發(fā)訪問(wèn)的性能,提高并發(fā)處理能力。Java內(nèi)存模型的優(yōu)化策略垃圾回收優(yōu)化1.根據(jù)應(yīng)用場(chǎng)景選擇合適的垃圾回收器,避免出現(xiàn)不必要的性能開(kāi)銷(xiāo)。2.調(diào)整垃圾回收器的參數(shù),根據(jù)實(shí)際需求進(jìn)行性能優(yōu)化。3.避免出現(xiàn)過(guò)多的對(duì)象引用和循環(huán)引用,以減少垃圾回收的壓力和提高回收效率。緩存優(yōu)化1.使用合適的緩存策略,將頻繁訪問(wèn)的數(shù)據(jù)或?qū)ο筮M(jìn)行緩存,提高應(yīng)用性能。2.定期清理和更新緩存,避免出現(xiàn)過(guò)期的數(shù)據(jù)或?qū)ο笥绊憫?yīng)用正確性。3.使用分布式緩存等技術(shù)來(lái)擴(kuò)展緩存能力,提高系統(tǒng)的可伸縮性和穩(wěn)定性。Java內(nèi)存模型的優(yōu)化策略代碼優(yōu)化1.減少不必要的對(duì)象創(chuàng)建和銷(xiāo)毀,避免出現(xiàn)過(guò)多的內(nèi)存開(kāi)銷(xiāo)。2.使用基本類(lèi)型代替包裝類(lèi)型,減少自動(dòng)裝箱和拆箱帶來(lái)的性能開(kāi)銷(xiāo)。3.避免使用過(guò)于復(fù)雜的算法和數(shù)據(jù)結(jié)構(gòu),以減少代碼復(fù)雜度和提高代碼可讀性。性能監(jiān)控與分析1.使用合適的性能監(jiān)控工具和分析工具,對(duì)系統(tǒng)進(jìn)行實(shí)時(shí)監(jiān)控和性能分析。2.定期進(jìn)行性能測(cè)試和壓力測(cè)試,發(fā)現(xiàn)和解決潛在的性能問(wèn)題。3.根據(jù)性能分析結(jié)果進(jìn)行針對(duì)性的優(yōu)化,提高系統(tǒng)整體性能和穩(wěn)定性。JMM優(yōu)化實(shí)例分析Java內(nèi)存模型與優(yōu)化JMM優(yōu)化實(shí)例分析JMM優(yōu)化實(shí)例分析-減少鎖競(jìng)爭(zhēng)1.鎖分段:將大鎖分解為多個(gè)小鎖,降低鎖競(jìng)爭(zhēng)的概率,提高并發(fā)性能。2.鎖消除:在不影響數(shù)據(jù)一致性的情況下,盡可能去除不必要的鎖操作,減少線程間的互斥開(kāi)銷(xiāo)。3.鎖粗化:將多次連續(xù)的加鎖、解鎖操作合并為一次,降低鎖操作的頻率,減小開(kāi)銷(xiāo)。JMM優(yōu)化實(shí)例分析-線程本地存儲(chǔ)1.線程本地存儲(chǔ):為每個(gè)線程創(chuàng)建獨(dú)立的存儲(chǔ)空間,避免線程間的數(shù)據(jù)競(jìng)爭(zhēng)。2.減少數(shù)據(jù)共享:通過(guò)線程本地存儲(chǔ),減少全局變量的使用,降低數(shù)據(jù)同步的開(kāi)銷(xiāo)。3.提高性能:線程本地存儲(chǔ)可以避免線程切換時(shí)的數(shù)據(jù)同步,提高并發(fā)性能。JMM優(yōu)化實(shí)例分析JMM優(yōu)化實(shí)例分析-讀寫(xiě)鎖優(yōu)化1.讀寫(xiě)鎖分離:讀操作和寫(xiě)操作使用不同的鎖,提高并發(fā)性能。2.讀優(yōu)先鎖:在讀操作遠(yuǎn)多于寫(xiě)操作的情況下,優(yōu)先考慮讀操作的并發(fā)性,提高整體性能。3.寫(xiě)?zhàn)囸I解決:通過(guò)公平鎖或其他機(jī)制,防止寫(xiě)操作長(zhǎng)時(shí)間得不到執(zhí)行,解決寫(xiě)?zhàn)囸I問(wèn)題。JMM優(yōu)化實(shí)例分析-緩存行對(duì)齊1.緩存行對(duì)齊:通過(guò)合理的內(nèi)存布局,減少緩存行的無(wú)效刷新,提高緩存利用率。2.減少偽共享:避免多個(gè)線程同時(shí)修改同一緩存行的不同變量,減少不必要的同步開(kāi)銷(xiāo)。3.提高性能:通過(guò)緩存行對(duì)齊和減少偽共享,可以提高并發(fā)性能。JMM優(yōu)化實(shí)例分析JMM優(yōu)化實(shí)例分析-無(wú)鎖數(shù)據(jù)結(jié)構(gòu)1.無(wú)鎖數(shù)據(jù)結(jié)構(gòu):通過(guò)原子操作和內(nèi)存屏障,實(shí)現(xiàn)無(wú)鎖的數(shù)據(jù)訪問(wèn)和修改,提高并發(fā)性能。2.減少鎖開(kāi)銷(xiāo):無(wú)鎖數(shù)據(jù)結(jié)構(gòu)可以避免鎖的使用,減小了線程間的互斥開(kāi)銷(xiāo)。3.適用場(chǎng)景:適用于讀多寫(xiě)少、數(shù)據(jù)競(jìng)爭(zhēng)不激烈的場(chǎng)景,可以大幅提高并發(fā)性能。JMM優(yōu)化實(shí)例分析-樂(lè)觀鎖與悲觀鎖選擇1.樂(lè)觀鎖:假設(shè)沖突較少,通過(guò)版本號(hào)或CAS操作實(shí)現(xiàn)并發(fā)控制,適用于讀多寫(xiě)少

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論