电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java性能分析

瀏覽:37日期:2024-06-20 08:40:28
內(nèi)容: (來(lái)源:java編程思想) “本附錄由Joe Sharp投稿,并獲得他的同意在這兒轉(zhuǎn)載。請(qǐng)聯(lián)系SharpJoe@aol.comJava語(yǔ)言特別強(qiáng)調(diào)準(zhǔn)確性,但可靠的行為要以性能作為代價(jià)。這一特點(diǎn)反映在自動(dòng)收集垃圾、嚴(yán)格的運(yùn)行期檢查、完整的字節(jié)碼檢查以及保守的運(yùn)行期同步等等方面。對(duì)一個(gè)解釋型的虛擬機(jī)來(lái)說(shuō),由于目前有大量平臺(tái)可供挑選,所以進(jìn)一步阻礙了性能的發(fā)揮。“先做完它,再逐步完善。幸好需要改進(jìn)的地方通常不會(huì)太多。(Steve McConnell的《About performance》[16])本附錄的宗旨就是指導(dǎo)大家尋找和優(yōu)化“需要完善的那一部分。D.1 基本方法只有正確和完整地檢測(cè)了程序后,再可著手解決性能方面的問(wèn)題:(1) 在現(xiàn)實(shí)環(huán)境中檢測(cè)程序的性能。若符合要求,則目標(biāo)達(dá)到。若不符合,則轉(zhuǎn)到下一步。(2) 尋找最致命的性能瓶頸。這也許要求一定的技巧,但所有努力都不會(huì)白費(fèi)。如簡(jiǎn)單地猜測(cè)瓶頸所在,并試圖進(jìn)行優(yōu)化,那么可能是白花時(shí)間。(3) 運(yùn)用本附錄介紹的提速技術(shù),然后返回步驟1。為使努力不至白費(fèi),瓶頸的定位是至關(guān)重要的一環(huán)。Donald Knuth[9]曾改進(jìn)過(guò)一個(gè)程序,那個(gè)程序把50%的時(shí)間都花在約4%的代碼量上。在僅一個(gè)工作小時(shí)里,他修改了幾行代碼,使程序的執(zhí)行速度倍增。此時(shí),若將時(shí)間繼續(xù)投入到剩余代碼的修改上,那么只會(huì)得不償失。Knuth在編程界有一句名言:“過(guò)早的優(yōu)化是一切麻煩的根源(Premature optimization is the root of all evil)。最明智的做法是抑制過(guò)早優(yōu)化的沖動(dòng),因?yàn)槟菢幼隹赡苓z漏多種有用的編程技術(shù),造成代碼更難理解和操控,并需更大的精力進(jìn)行維護(hù)。D.2 尋找瓶頸為找出最影響程序性能的瓶頸,可采取下述幾種方法:D.2.1 安插自己的測(cè)試代碼插入下述“顯式計(jì)時(shí)代碼,對(duì)程序進(jìn)行評(píng)測(cè):long start = System.currentTimeMillis();// 要計(jì)時(shí)的運(yùn)算代碼放在這兒long time = System.currentTimeMillis() - start;利用System.out.println(),讓一種不常用到的方法將累積時(shí)間打印到控制臺(tái)窗口。由于一旦出錯(cuò),編譯器會(huì)將其忽略,所以可用一個(gè)“靜態(tài)最終布爾值(Static final boolean)打開(kāi)或關(guān)閉計(jì)時(shí),使代碼能放心留在最終發(fā)行的程序里,這樣任何時(shí)候都可以拿來(lái)應(yīng)急。盡管還可以選用更復(fù)雜的評(píng)測(cè)手段,但若僅僅為了量度一個(gè)特定任務(wù)的執(zhí)行時(shí)間,這無(wú)疑是最簡(jiǎn)便的方法。System.currentTimeMillis()返回的時(shí)間以千分之一秒(1毫秒)為單位。然而,有些系統(tǒng)的時(shí)間精度低于1毫秒(如Windows PC),所以需要重復(fù)n次,再將總時(shí)間除以n,獲得準(zhǔn)確的時(shí)間。D.2.2 JDK性能評(píng)測(cè)[2]JDK配套提供了一個(gè)內(nèi)建的評(píng)測(cè)程序,能跟蹤花在每個(gè)例程上的時(shí)間,并將評(píng)測(cè)結(jié)果寫入一個(gè)文件。不幸的是,JDK評(píng)測(cè)器并不穩(wěn)定。它在JDK 1.1.1中能正常工作,但在后續(xù)版本中卻非常不穩(wěn)定。為運(yùn)行評(píng)測(cè)程序,請(qǐng)?jiān)谡{(diào)用Java解釋器的未優(yōu)化版本時(shí)加上-prof選項(xiàng)。例如:java_g -prof myClass或加上一個(gè)程序片(Applet):java_g -prof sun.applet.AppletViewer applet.html理解評(píng)測(cè)程序的輸出信息并不容易。事實(shí)上,在JDK 1.0中,它居然將方法名稱截短為30字符。所以可能無(wú)法區(qū)分出某些方法。然而,若您用的平臺(tái)確實(shí)能支持-prof選項(xiàng),那么可試試Vladimir Bulatov的“HyperPorf[3]或者Greg White的“ProfileViewer來(lái)解釋一下結(jié)果。D.2.3 特殊工具如果想隨時(shí)跟上性能優(yōu)化工具的潮流,最好的方法就是作一些Web站點(diǎn)的???。比如由Jonathan Hardwick制作的“Tools for Optimizing Java(Java優(yōu)化工具)網(wǎng)站:http://www.cs.cmu.edu/~jch/java/tools.htmlD.2.4 性能評(píng)測(cè)的技巧■由于評(píng)測(cè)時(shí)要用到系統(tǒng)時(shí)鐘,所以當(dāng)時(shí)不要運(yùn)行其他任何進(jìn)程或應(yīng)用程序,以免影響測(cè)試結(jié)果。■如對(duì)自己的程序進(jìn)行了修改,并試圖(至少在開(kāi)發(fā)平臺(tái)上)改善它的性能,那么在修改前后應(yīng)分別測(cè)試一下代碼的執(zhí)行時(shí)間。■盡量在完全一致的環(huán)境中進(jìn)行每一次時(shí)間測(cè)試。■如果可能,應(yīng)設(shè)計(jì)一個(gè)不依賴任何用戶輸入的測(cè)試,避免用戶的不同反應(yīng)導(dǎo)致結(jié)果出現(xiàn)誤差。D.3 提速方法現(xiàn)在,關(guān)鍵的性能瓶頸應(yīng)已隔離出來(lái)。接下來(lái),可對(duì)其應(yīng)用兩種類型的優(yōu)化:常規(guī)手段以及依賴Java語(yǔ)言。D.3.1 常規(guī)手段通常,一個(gè)有效的提速方法是用更現(xiàn)實(shí)的方式重新定義程序。例如,在《Programming Pearls》(編程拾貝)一書中[14],Bentley利用了一段小說(shuō)數(shù)據(jù)描寫,它可以生成速度非???、而且非常精簡(jiǎn)的拼寫檢查器,從而介紹了Doug McIlroy對(duì)英語(yǔ)語(yǔ)言的表述。除此以外,與其他方法相比,更好的算法也許能帶來(lái)更大的性能提升——特別是在數(shù)據(jù)集的尺寸越來(lái)越大的時(shí)候。欲了解這些常規(guī)手段的詳情,請(qǐng)參考本附錄末尾的“一般書籍清單。D.3.2 依賴語(yǔ)言的方法為進(jìn)行客觀的分析,最好明確掌握各種運(yùn)算的執(zhí)行時(shí)間。這樣一來(lái),得到的結(jié)果可獨(dú)立于當(dāng)前使用的計(jì)算機(jī)——通過(guò)除以花在本地賦值上的時(shí)間,最后得到的就是“標(biāo)準(zhǔn)時(shí)間。運(yùn)算 示例 標(biāo)準(zhǔn)時(shí)間本地賦值 i=n; 1.0實(shí)例賦值 this.i=n; 1.2int增值 i++; 1.5byte增值 b++; 2.0short增值 s++; 2.0float增值 f++; 2.0double增值 d++; 2.0空循環(huán) while(true) n++; 2.0三元表達(dá)式 (x>2(或2的任意次冪) 使用更快的硬件指令D.3.3 特殊情況■字串的開(kāi)銷:字串連接運(yùn)算符+看似簡(jiǎn)單,但實(shí)際需要消耗大量系統(tǒng)資源。編譯器可高效地連接字串,但變量字串卻要求可觀的處理器時(shí)間。例如,假設(shè)s和t是字串變量:System.out.println('heading' + s + 'trailer' + t);上述語(yǔ)句要求新建一個(gè)StringBuffer(字串緩沖),追加自變量,然后用toString()將結(jié)果轉(zhuǎn)換回一個(gè)字串。因此,無(wú)論磁盤空間還是處理器時(shí)間,都會(huì)受到嚴(yán)重消耗。若準(zhǔn)備追加多個(gè)字串,則可考慮直接使用一個(gè)字串緩沖——特別是能在一個(gè)循環(huán)里重復(fù)利用它的時(shí)候。通過(guò)在每次循環(huán)里禁止新建一個(gè)字串緩沖,可節(jié)省980單位的對(duì)象創(chuàng)建時(shí)間(如前所述)。利用substring()以及其他字串方法,可進(jìn)一步地改善性能。如果可行,字符數(shù)組的速度甚至能夠更快。也要注意由于同步的關(guān)系,所以StringTokenizer會(huì)造成較大的開(kāi)銷。■同步:在JDK解釋器中,調(diào)用同步方法通常會(huì)比調(diào)用不同步方法慢10倍。經(jīng)JIT編譯器處理后,這一性能上的差距提升到50到100倍(注意前表總結(jié)的時(shí)間顯示出要慢97倍)。所以要盡可能避免使用同步方法——若不能避免,方法的同步也要比代碼塊的同步稍快一些?!鲋貜?fù)利用對(duì)象:要花很長(zhǎng)的時(shí)間來(lái)新建一個(gè)對(duì)象(根據(jù)前表總結(jié)的時(shí)間,對(duì)象的新建時(shí)間是賦值時(shí)間的980倍,而新建一個(gè)小數(shù)組的時(shí)間是賦值時(shí)間的3100倍)。因此,最明智的做法是保存和更新老對(duì)象的字段,而不是創(chuàng)建一個(gè)新對(duì)象。例如,不要在自己的paint()方法中新建一個(gè)Font對(duì)象。相反,應(yīng)將其聲明成實(shí)例對(duì)象,再初始化一次。在這以后,可在paint()里需要的時(shí)候隨時(shí)進(jìn)行更新。參見(jiàn)Bentley編著的《編程拾貝》,p.81[15]?!霎惓#褐挥性诓徽5那闆r下,才應(yīng)放棄異常處理模塊。什么才叫“不正常呢?這通常是指程序遇到了問(wèn)題,而這一般是不愿見(jiàn)到的,所以性能不再成為優(yōu)先考慮的目標(biāo)。進(jìn)行優(yōu)化時(shí),將小的“try-catch塊合并到一起。由于這些塊將代碼分割成小的、各自獨(dú)立的片斷,所以會(huì)妨礙編譯器進(jìn)行優(yōu)化。另一方面,若過(guò)份熱衷于刪除異常處理模塊,也可能造成代碼健壯程度的下降。■散列處理:首先,Java 1.0和1.1的標(biāo)準(zhǔn)“散列表(Hashtable)類需要造型以及特別消耗系統(tǒng)資源的同步處理(570單位的賦值時(shí)間)。其次,早期的JDK庫(kù)不能自動(dòng)決定最佳的表格尺寸。最后,散列函數(shù)應(yīng)針對(duì)實(shí)際使用項(xiàng)(Key)的特征設(shè)計(jì)??紤]到所有這些原因,我們可特別設(shè)計(jì)一個(gè)散列類,令其與特定的應(yīng)用程序配合,從而改善常規(guī)散列表的性能。注意Java 1.2集合庫(kù)的散列映射(HashMap)具有更大的靈活性,而且不會(huì)自動(dòng)同步?!龇椒▋?nèi)嵌:只有在方法屬于final(最終)、private(專用)或static(靜態(tài))的情況下,Java編譯器才能內(nèi)嵌這個(gè)方法。而且某些情況下,還要求它絕對(duì)不可以有局部變量。若代碼花大量時(shí)間調(diào)用一個(gè)不含上述任何屬性的方法,那么請(qǐng)考慮為其編寫一個(gè)“final版本。■I/O:應(yīng)盡可能使用緩沖。否則,最終也許就是一次僅輸入/輸出一個(gè)字節(jié)的惡果。注意JDK 1.0的I/O類采用了大量同步措施,所以若使用象readFully()這樣的一個(gè)“大批量調(diào)用,然后由自己解釋數(shù)據(jù),就可獲得更佳的性能。也要注意Java 1.1的“reader和“writer類已針對(duì)性能進(jìn)行了優(yōu)化?!鲈煨秃蛯?shí)例:造型會(huì)耗去2到200個(gè)單位的賦值時(shí)間。開(kāi)銷更大的甚至要求上溯繼承(遺傳)結(jié)構(gòu)。其他高代價(jià)的操作會(huì)損失和恢復(fù)更低層結(jié)構(gòu)的能力。■圖形:利用剪切技術(shù),減少在repaint()中的工作量;倍增緩沖區(qū),提高接收速度;同時(shí)利用圖形壓縮技術(shù),縮短下載時(shí)間。來(lái)自JavaWorld的“Java Applets以及來(lái)自Sun的“Performing Animation是兩個(gè)很好的教程。請(qǐng)記著使用最貼切的命令。例如,為根據(jù)一系列點(diǎn)畫一個(gè)多邊形,和drawLine()相比,drawPolygon()的速度要快得多。如必須畫一條單像素粗細(xì)的直線,drawLine(x,y,x,y)的速度比f(wàn)illRect(x,y,1,1)快?!鍪褂肁PI類:盡量使用來(lái)自Java API的類,因?yàn)樗鼈儽旧硪厌槍?duì)機(jī)器的性能進(jìn)行了優(yōu)化。這是用Java難于達(dá)到的。比如在復(fù)制任意長(zhǎng)度的一個(gè)數(shù)組時(shí),arraryCopy()比使用循環(huán)的速度快得多。■替換API類:有些時(shí)候,API類提供了比我們希望更多的功能,相應(yīng)的執(zhí)行時(shí)間也會(huì)增加。因此,可定做特別的版本,讓它做更少的事情,但可更快地運(yùn)行。例如,假定一個(gè)應(yīng)用程序需要一個(gè)容器來(lái)保存大量數(shù)組。為加快執(zhí)行速度,可將原來(lái)的Vector(矢量)替換成更快的動(dòng)態(tài)對(duì)象數(shù)組。1. 其他建議■將重復(fù)的常數(shù)計(jì)算移至關(guān)鍵循環(huán)之外——比如計(jì)算固定長(zhǎng)度緩沖區(qū)的buffer.length?!鰏tatic final(靜態(tài)最終)常數(shù)有助于編譯器優(yōu)化程序。■實(shí)現(xiàn)固定長(zhǎng)度的循環(huán)。■使用javac的優(yōu)化選項(xiàng):-O。它通過(guò)內(nèi)嵌static,final以及private方法,從而優(yōu)化編譯過(guò)的代碼。注意類的長(zhǎng)度可能會(huì)增加(只對(duì)JDK 1.1而言——更早的版本也許不能執(zhí)行字節(jié)查證)。新型的“Just-in-time(JIT)編譯器會(huì)動(dòng)態(tài)加速代碼?!霰M可能地將計(jì)數(shù)減至0——這使用了一個(gè)特殊的JVM字節(jié)碼。D.4 參考資源D.4.1 性能工具[1] 運(yùn)行于Pentium Pro 200,Netscape 3.0,JDK 1.1.4的MicroBenchmark(參見(jiàn)下面的參考資源[5])[2] Sun的Java文檔頁(yè)——JDK Java解釋器主題:http://java.sun.com/products/JDK/tools/win32/java.html[3] Vladimir Bulatov的HyperProfhttp://www.physics.orst.edu/~bulatov/HyperProf[4] Greg White的ProfileViewerhttp://www.inetmi.com/~gwhi/ProfileViewer/ProfileViewer.htmlD.4.2 Web站點(diǎn)[5] 對(duì)于Java代碼的優(yōu)化主題,最出色的在線參考資源是Jonathan Hardwick的“Java Optimization網(wǎng)站:http://www.cs.cmu.edu/~jch/java/optimization.html“Java優(yōu)化工具主頁(yè):http://www.cs.cmu.edu/~jch/java/tools.html以及“Java Microbenchmarks(有一個(gè)45秒鐘的評(píng)測(cè)過(guò)程):http://www.cs.cmu.edu/~jch/java/benchmarks.htmlD.4.3 文章[6] “Make Java fast:Optimize! How to get the greatest performanceout of your code through low-level optimizations in Java(讓Java更快:優(yōu)化!如何通過(guò)在Java中的低級(jí)優(yōu)化,使代碼發(fā)揮最出色的性能)。作者:Doug Bell。網(wǎng)址:http://www.javaworld.com/javaworld/jw-04-1997/jw-04-optimize.html(含一個(gè)全面的性能評(píng)測(cè)程序片,有詳盡注釋)[7] “Java Optimization Resources(Java優(yōu)化資源)http://www.cs.cmu.edu/~jch/java/resources.html[8] “Optimizing Java for Speed(優(yōu)化Java,提高速度):http://www.cs.cmu.edu/~jch/java/speed.html[9] “An Empirical Study of FORTRAN Programs(FORTRAN程序?qū)崙?zhàn)解析)。作者:Donald Knuth。1971年出版。第1卷,p.105-33,“軟件——實(shí)踐和練習(xí)。[10] “Building High-Performance Applications and Servers in Java:An Experiential Study。作者:Jimmy Nguyen,Michael Fraenkel,RichardRedpath,Binh Q. Nguyen以及Sandeep K. Singhal。IBM T.J. Watson ResearchCenter,IBM Software Solutions。http://www.ibm.com/java/education/javahipr.htmlD.4.4 Java專業(yè)書籍[11] 《Advanced Java,Idioms,Pitfalls,Styles, and Programming Tips》。作者:Chris Laffra。Prentice Hall 1997年出版(Java 1.0)。第11章第20小節(jié)。D.4.5 一般書籍[12] 《Data Structures and C Programs》(數(shù)據(jù)結(jié)構(gòu)和C程序)。作者:J.Van Wyk。Addison-Wesly 1998年出版。[13] 《Writing Efficient Programs》(編寫有效的程序)。作者:Jon Bentley。Prentice Hall 1982年出版。特別參考p.110和p.145-151。[14] 《More Programming Pearls》(編程拾貝第二版)。作者:JonBentley。“Association for Computing Machinery,1998年2月。[15] 《Programming Pearls》(編程拾貝)。作者:Jone Bentley。Addison-Wesley 1989年出版。第2部分強(qiáng)調(diào)了常規(guī)的性能改善問(wèn)題。 [16] 《Code Complete:A Practical Handbook of Software Construction》(完整代碼索引:實(shí)用軟件開(kāi)發(fā)手冊(cè))。作者:Steve McConnell。Microsoft出版社1993年出版,第9章。[17] 《Object-Oriented System Development》(面向?qū)ο笙到y(tǒng)的開(kāi)發(fā))。作者:Champeaux,Lea和Faure。第25章。[18] 《The Art of Programming》(編程藝術(shù))。作者:Donald Knuth。第1卷“基本算法第3版;第3卷“排序和搜索第2版。Addison-Wesley出版。這是有關(guān)程序算法的一本百科全書。[19] 《Algorithms in C:Fundammentals,Data Structures, Sorting,Searching》(C算法:基礎(chǔ)、數(shù)據(jù)結(jié)構(gòu)、排序、搜索)第3版。作者:RobertSedgewick。Addison-Wesley 1997年出版。作者是Knuth的學(xué)生。這是專門討論幾種語(yǔ)言的七個(gè)版本之一。對(duì)算法進(jìn)行了深入淺出的解釋。 Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 浙江清风侠环保设备有限公司 | 博博会2021_中国博物馆及相关产品与技术博览会【博博会】 | 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 橡胶接头_橡胶软接头_套管伸缩器_管道伸缩器厂家-巩义市远大供水材料有限公司 | 达利园物流科技集团-| 领袖户外_深度旅游、摄影旅游、小团慢旅行、驴友网 | 手板-手板模型-手板厂-手板加工-生产厂家,[东莞创域模型] | 东莞市天进机械有限公司-钉箱机-粘箱机-糊箱机-打钉机认准东莞天进机械-厂家直供更放心! | 骨密度检测仪_骨密度分析仪_骨密度仪_动脉硬化检测仪专业生产厂家【品源医疗】 | 骨密度仪-骨密度测定仪-超声骨密度仪-骨龄测定仪-天津开发区圣鸿医疗器械有限公司 | 涂层测厚仪_漆膜仪_光学透过率仪_十大创新厂家-果欧电子科技公司 | 砂磨机_立式纳米砂磨机_实验室砂磨机-广州儒佳化工设备厂家 | 成都热收缩包装机_袖口式膜包机_高速塑封机价格_全自动封切机器_大型套膜机厂家 | 非小号行情 - 专业的区块链、数字藏品行情APP、金色财经官网 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 气密性检测仪_气密性检测设备_防水测试仪_密封测试仪-岳信仪器 | 心得体会网_心得体会格式范文模板 | 西门子伺服电机维修,西门子电源模块维修,西门子驱动模块维修-上海渠利 | 二维运动混料机,加热型混料机,干粉混料机-南京腾阳干燥设备厂 | 佛山市钱丰金属不锈钢蜂窝板定制厂家|不锈钢装饰线条|不锈钢屏风| 电梯装饰板|不锈钢蜂窝板不锈钢工艺板材厂家佛山市钱丰金属制品有限公司 | 连栋温室大棚建造厂家-智能玻璃温室-薄膜温室_青州市亿诚农业科技 | 回收二手冲床_金丰旧冲床回收_协易冲床回收 - 大鑫机械设备 | 挨踢网-大家的导航!| 厦门ISO认证|厦门ISO9001认证|厦门ISO14001认证|厦门ISO45001认证-艾索咨询专注ISO认证行业 | 全国国际学校排名_国际学校招生入学及学费-学校大全网 | 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 山东柳店新能源科技有限公司| 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 全温度恒温培养摇床-大容量-立式-远红外二氧化碳培养箱|南荣百科 | 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 - 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 | 湖南成人高考报名-湖南成考网 | 南溪在线-南溪招聘找工作、找房子、找对象,南溪综合生活信息门户! | 江苏南京多语种翻译-专业翻译公司报价-正规商务翻译机构-南京华彦翻译服务有限公司 | 多米诺-多米诺世界纪录团队-多米诺世界-多米诺团队培训-多米诺公关活动-多米诺创意广告-多米诺大型表演-多米诺专业赛事 | 岩棉切条机厂家_玻璃棉裁条机_水泥基保温板设备-廊坊鹏恒机械 | 珠海网站建设_响应网站建设_珠海建站公司_珠海网站设计与制作_珠海网讯互联 | 稳尚教育加盟-打造高考志愿填报平台_新高考志愿填报加盟_学业生涯规划加盟 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 |