版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1java34JVMjava.1.javaQQ這個(gè)軟件運(yùn)行時(shí)所分配的內(nèi)容的獨(dú)立空間中。cpu做時(shí)間片的切換其實(shí)真正電腦中的程序的運(yùn)行不是同時(shí)在運(yùn)行的。CPU負(fù)責(zé)程序的運(yùn)行,而CPU在運(yùn)行程序的過某個(gè)時(shí)刻點(diǎn)上,它其實(shí)只能運(yùn)行一個(gè)程序。而不是多個(gè)程序。而CPU它每個(gè)程序就是進(jìn)程,而每個(gè)進(jìn)會(huì)有多個(gè)線程,而CPU是在這些線程之間進(jìn)行切換。1ThreadMyThreadWithExtends2、實(shí)現(xiàn)Runnable接口的.2.java同步解synchronized(需要一個(gè)任意的對(duì)象(鎖)}synchronized是javaJavaIO或者其他原因(sleep方法)被阻塞了,時(shí)間或者能夠響應(yīng)中斷),Lock就可以辦到。Lock就可以辦到。Locksynchronized無法辦到的。總的來說,也就是說Lock提供了比synchronized的功能。2.2locksynchronizedLocksynchronizedsynchronized不需要用戶去手動(dòng)釋Lock則必須要用戶去手動(dòng)釋放鎖,如果沒有主動(dòng)釋放鎖,就有可能導(dǎo)致出現(xiàn)publicinterfaceLock{voidlock();voidlockInterruptibly()publicinterfaceLock{voidlock();voidlockInterruptibly()throwsInterruptedException;booleantryLock();booleantryLock(longtime,TimeUnitunit)throwsInterruptedException;voidunlock();}Locklock()、tryLock()、tryLock(longtime,TimeUnitunit)、lockInterruptibly()是用來獲取鎖的。由于面講到如果采用Lock,必須主動(dòng)去釋放鎖,并且在發(fā)生異常時(shí),不會(huì)自動(dòng)釋Lock必須在try{}catch{}finally果獲取失?。存i已被其他線程獲?。瑒t返回false,也就說這個(gè)方法無論如何都會(huì)立即tryLock(longtime,TimeUnitunit)tryLock()方法是類似的,只不過區(qū)別在于這個(gè)方法在拿不到鎖時(shí)會(huì)等待一定的時(shí)間,在時(shí)間期限之內(nèi)如果還拿不到鎖,就返回false。如果true。lckIetily方法比較特殊,當(dāng)通過這個(gè)方法去獲取鎖時(shí),如果線程正在等待獲取鎖,則這個(gè)線程能夠響應(yīng)中斷,即中斷線程的等待狀態(tài)。也就使說,當(dāng)兩個(gè)線程同時(shí)通過lck.ckIetilyAB那么對(duì)線程B調(diào)用teadB.etB現(xiàn)了Lock接口的類,并且ReentrantLock提供了的方法,ReentrantLock,意思是ReentrantLock的使用案例:1,lock()的正確使用方法2,tryLock()的使用方法MyTryLockMyInterruptiblypublicinterface ockpublicinterface ockReturnsthelockusedfor*@returnthelockusedforLockReturnsthelockusedfor@returnthelockusedforLock }現(xiàn)了ReadWriock接口。ReentrantReadWriock里面提供了很多豐富的方法,不過最主要的有兩個(gè)方法例子 果LocksynchronizedLocksynchronizedJava中的關(guān)鍵字,synchronized是內(nèi)置的語言synchronized在發(fā)生異常時(shí),會(huì)自動(dòng)釋放線程占有的鎖,因此不會(huì)導(dǎo)致死鎖現(xiàn)象發(fā)LockunLock()去釋放鎖,則很可能造成死鎖現(xiàn)象,Lockfinallyjava.1.javaJDK5.0java.util.concurrent包中,51SingleThreadExecutor:只有一個(gè)線程的線程池,因此所有提交的任務(wù)是順序執(zhí)行,代碼:Executors.newSingleThreadExecutor()2CachedThreadPool:線程池里有很多線程需要同時(shí)執(zhí)行,老的可用線程將被新的任務(wù)觸60秒內(nèi)沒執(zhí)行,那么將被終止并從池中刪除,3FixedThreadPool:代碼:Executors.newFixedThreadPool(4)4cpu的數(shù)量保持一致,獲取cpuintcpuNums=Runtime.getRuntime().availableProcessors();4ScheduledThreadPool:用來調(diào)度即將執(zhí)行的任務(wù)的線程池,5SingleThreadScheduledPool:只有一個(gè)線程,用來調(diào)度執(zhí)行將來的任務(wù),代碼:RunnableFutureCallableFuture實(shí)例表示任務(wù)的狀態(tài).2.javaBlockingQueuejava.util.concurrent下的主要用來控制線程同步的工具。主要的方法是:put、take一對(duì)阻塞存?。籥dd、poll一對(duì)非阻塞存取。插入add(anObject):anObject加到BlockingQueue里,即如果BlockingQueue可以容納,true,否則拋出offer(anObject):表示如果可能的話,將anObject加到BlockingQueue里,BlockingQueue可以容納,則返回true,put(anObject):anObjectBlockingQueue里,BlockQueue沒有空間,則調(diào)BlockingQueue里面有空間再繼續(xù). take():BlockingQueue里排在首位的對(duì)象,BlockingQueue為空,阻斷進(jìn)入等待狀態(tài)直到Blocking有新的對(duì)象被加入為止據(jù)可能booleanremove(Objecto);從隊(duì)列移除元素,如果存在,即移除一個(gè)或者,隊(duì)列改truepublicbooleancontains(Objecto);查看隊(duì)列是否存在這個(gè)元素,存在返回intdrainTo(Collection<?superE>c);傳入的集合中的元素,如果在隊(duì)列中存在,那么將intdrainTo(Collection<?superEcintmaxElements);和上面方法的區(qū)別在于,制定了移int參數(shù)來指明其大小.FIFO(先入先出)順序排序的。2、LinkedBlockingQueue:大小不定的BlockingQueue,若其構(gòu)造函數(shù)帶一個(gè)規(guī)定大小的參數(shù),生成的BlockingQueue有大小限制,若不帶大小參數(shù),所生成的BlockingQueue的大小由Integer.MAX_VALUE來決定.FIFO(先入先出)順序排序的。LinkedBlockingQueue可以指定容量,也可以不指定,不指定的話,默認(rèn)最大是Integer.MAX_VALUE,puttake方法,put方法在隊(duì)列滿的時(shí)候會(huì)阻塞直到有隊(duì)列成員被消費(fèi),take方法在隊(duì)列空的時(shí)候會(huì)阻塞,直到有隊(duì)列成員被放進(jìn)來。LinkedBlockingQueueArrayBlockingQueue比較起來,它們背后所用的數(shù)據(jù)結(jié)構(gòu)不一樣,導(dǎo)致LinkedBlockingQueue的數(shù)據(jù)吞吐量要大于ArrayBlockingQueue,但程數(shù)量很大時(shí)其性能的ArrayBlockingQueue.javaJMS.1.步通信。JavaAPI,絕大多數(shù)MOMJMS提供JMS是一種與廠商無關(guān)的API,用來消息收發(fā)系統(tǒng)消息。它類似于JDBC(JavaDatabaseConnectivity):這里,JDBC是可以用來許多不同關(guān)系數(shù)據(jù)庫(kù)的API,而JMS則提供同樣與廠商無關(guān)的方法以消息收發(fā)服務(wù)許多廠商都支持JMS,包括IBM的MQSeriesBEAWeblogicJMSserviceProgressSonicMQ,這只是幾個(gè)例子。JMS使您能夠通過消息收發(fā)服務(wù)(有時(shí)稱為消息中介程序或路由器)JMS客戶機(jī)向另一個(gè)JMSJMS中的一種類型對(duì)象,由兩部分組成:報(bào)頭和消息主體。(TextMessage)、可序列化的對(duì)象(ObjectMessage)、屬性集合(MapMessage)、字節(jié)流(BytesMessage)、原始值流(StreamMessage),還有無有效負(fù)載的消息(Message)。.2.JMSJMS(JavaMessagingService)Java平臺(tái)上有關(guān)面向消息中間件(MOM)的技術(shù)規(guī)范,它便Java應(yīng)用程序進(jìn)行消息交換,并且通過提供標(biāo)準(zhǔn)的產(chǎn)生、發(fā)送、接收消息的Java消息服務(wù)。JMSJMSJMSJMSJMSJMSJMSJMS隊(duì)列:一個(gè)容納那些被發(fā)送的等待閱讀的消息的區(qū)域。與隊(duì)列名字所暗示的意思不同,Java中消息。這里,生產(chǎn)者知道消費(fèi)者的隊(duì)列,并直接將消息發(fā)送到消費(fèi)者的隊(duì)列。發(fā)布者/訂閱者模型支持向一個(gè)特定的消息發(fā)布消息。0或多個(gè)訂閱者可能對(duì)接收來自比是公告板。Java語言,JMSJava類可以通過JNDI中關(guān)于提供者的信息,連接不同的JMS提供者。這一組類首先使用接工廠ActiveMQ去 QueueJMSJavaJMS提供者,管理會(huì)話和隊(duì)列。既有開源的提供者ApacheJBossHornetQCoridanTheOpenJMSGroupBEABEAWebLogicServerJMSTIBCOSoftwareEMSGigaSpaces的GigaSpacesSoftwired2006iBusIONA的IONASeeBeyondIQManager(20058SunMicrosystems并購(gòu)webMethodsJMSmy-channelsNirvanaSonicSoftwareSonicMQSwiftMQSwiftMQIBM的WebSpherejavaJVM.1.java工具使jconsole是一種集成了上面所有命令功能的可視化工具,可以分析jvm的內(nèi)存使用情況JDK/bin下的“jconsole.exeJconsole后,將自動(dòng)搜索出本機(jī)運(yùn)行的所有虛擬機(jī)進(jìn)程,不需要用戶使用jps來查詢了,雙擊其中一個(gè)進(jìn)程即可開始。也可以“連接服務(wù)器,進(jìn)行虛擬機(jī)的。”提供了和jconsole.2.javaJava虛擬機(jī)在執(zhí)行Java程序的過,會(huì)把它所管理的內(nèi)存劃分為若干個(gè)不同的數(shù)據(jù)如上圖所示,Java虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)域被分為五個(gè)區(qū)域:堆(Heap)、棧(Stack)、本地方法棧(NativeStack)、方法區(qū)(MethodArea)、程序計(jì)數(shù)器(ProgramCountRegister)。堆對(duì)于大多數(shù)應(yīng)用來說,JavaHeapJava虛擬機(jī)管理的內(nèi)存的最大一塊,這塊區(qū)域隨著JavaHeap是一塊共享的區(qū)域,操作共享區(qū)域的成與JavaHeap相關(guān)的還有Java的回收機(jī)制(GC),JavaHeap是回收器管理的主要區(qū)域。程序猿所熟悉的、老生代、永久代的概念就是在堆里面,現(xiàn)在大多數(shù)的GC基本都采用了分代收集算法。如果再細(xì)致一點(diǎn),JavaHeapEden空間,F(xiàn)romSurvivor空間,ToSurvivor空間等。棧Java方法執(zhí)行時(shí)的內(nèi)存模型,每個(gè)方法執(zhí)行時(shí)都會(huì)創(chuàng)建一個(gè)棧幀(StackFrame)型,對(duì)象等信息。本地方法棧(Native本地方法棧(NativeStack)與Java虛擬(JavaStack)所發(fā)揮的作用非常相似,他java方法(也就是字節(jié)碼)服務(wù),而本地方法Native方法服務(wù)。方法區(qū)(Method方法區(qū)(MethodArea)與堆(JavaHeap)一樣,是各個(gè)線程共享的內(nèi)存區(qū)域,它用于虛擬機(jī)加載的類信息,常量,靜態(tài)變量,即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。雖然JavaJava虛擬機(jī)棧(JavaStack)本地方法棧(NativeStack)2堆(JavaHeap).3.GC.3.2.算法2、當(dāng)這一塊的內(nèi)存用完了,就將還存活著的對(duì)象到另外一塊上面,然后再把已使用過.3.3.標(biāo)記-整理算法 1.3.4.分代收集算法(Generational3、在中,每次收集時(shí)都發(fā)現(xiàn)有大批對(duì)象死去,量存活,那就選用算法,只需要付出少量存活對(duì)象的成本就可以完成收集。.4.回收Serial1、是一個(gè)單線程的收集器,“StopTheSerialOld JDK1.5ParallelScavenge收集器搭配使用ParNew2CPU3、Server模式下首選,目前只有它能與CMS收集器配合工4、使用-XX:+UseConcMarkSweepGC選項(xiàng)后的默認(rèn)收集器,也可以使用-2、收集器,算法,并行的多線程收集4、吞吐量=運(yùn)行用戶代碼時(shí)間/(運(yùn)行用戶代碼時(shí)間+收集時(shí)間),虛擬機(jī)總共運(yùn)行100分鐘,其中收集花掉1分鐘,那吞吐量就是99%-XX:+UseAdaptiveSize:動(dòng)態(tài)設(shè)置大小、Eden與Survivor區(qū)的比例、晉升老年代對(duì)象ParallelOld2CPUParallelScavenge加ParallelCMS2、非常符合互聯(lián)或者B/S系統(tǒng)的服務(wù)端上,重視服務(wù)的響應(yīng)速度,希望系統(tǒng)停頓時(shí)間重新標(biāo)記,StopTheWorld并發(fā)清除(CMSconcurrentsweep)7 Failure1、收集器技術(shù)發(fā)展的最前沿成果之2、G1是一個(gè)適用于服務(wù)器端、大內(nèi)存、多CPU情景的收集器,主要目標(biāo)是在維持高效率回收(highthoughput)的同時(shí),提供軟實(shí)時(shí)中斷特性。用戶可以指定一個(gè)時(shí)間上限,如果回收導(dǎo)致的程序暫停超過了用戶設(shè)定的時(shí)間上限,會(huì)打斷回收,恢復(fù)程序的執(zhí)行。M初始標(biāo)記:標(biāo)記一下GCRoots能直接關(guān)聯(lián)到的對(duì)象,需要停頓線程,但耗時(shí)很短GCRoot開始對(duì)堆中對(duì)象進(jìn)行可達(dá)性分析,找出存活的對(duì)象,這階RegionGC停頓G1CMSCMS的“標(biāo)記——清理”算法,G1會(huì)使用壓縮算法,保證不產(chǎn)生多余的碎片。收集階段,G1會(huì)將某個(gè)區(qū)域存活的對(duì)象拷貝的其他區(qū)域,然后將整個(gè)區(qū)域整個(gè)回收。間范圍內(nèi),G1會(huì)選擇適當(dāng)?shù)膮^(qū)域進(jìn)行收集,確保停頓時(shí)間不超過用戶指定時(shí)間。-XX:+UnlockExperimentalVMOptionsXX:+UseG1GCG1-XX:+UseConcMarkSweepGC使用CMS-XX:ParallelGCThreads=n:CPU數(shù)。.5.JVM - - - - - -- -此值可以設(shè)置與-Xmx相同,以避免每次JVM整個(gè)堆大小=++64m,所以增大年輕代后,將會(huì)減小年老代大小。此值對(duì)系統(tǒng)性能影響較大,Sun推薦配置為整個(gè)3/8。JDK5.01M,在相同物理內(nèi)存下,減小這個(gè)值能生成的線程。但是操作系統(tǒng)對(duì)一個(gè)進(jìn)程內(nèi)的線程數(shù)還是有限制的,不能無限生成,經(jīng)驗(yàn)值在3000~500041:41/54SurvivorEden2:4Survivor 最 0Survivor行多次,這樣可以增加對(duì)象再年輕代的存活時(shí)間,增加在年輕代即被回收的概論。--- --.6.jvm內(nèi)存相當(dāng)于可視化的jstat命令,用于監(jiān)視收集器管理的虛擬機(jī)內(nèi)存(java堆和永我們通過下面的一段代碼體驗(yàn)一下它的監(jiān)視功能。運(yùn)行時(shí)設(shè)置的虛擬機(jī)參數(shù)為:publicclassTestMemory{staticclassOOMObject{public ceholderpublicclassTestMemory{staticclassOOMObject{public ceholder=newbyte[64*}publicstaticvoidfillHeap(intnum)throwsExceptionArrayList<OOMObject>list=newArrayList<OOMObject>();for(inti=0;i<num;i++){}}publicstaticvoidmain(String[]args)throwsException{}}區(qū)都基本上被清空了,但是老年代仍然保持峰值狀態(tài),這說明,填充的數(shù)據(jù)在GC后仍然存listSystem.gc();fillHeap(1000);后,就可以全部回packageimportjava.io.IOException;importpackageimportjava.io.IOException;import***@paramThreadthread=newThread(newRunnable(){publicvoidrun()while(true);}},"testBusyThread");}*publicstaticvoidcrea ockThread(finalObjectlock){Threadthread=newThread(newRunnable(){publicvoidrun() synchronized(lock){try}catch(InterruptedExceptione){}}}},"testLockThread");}publicstaticvoidmain(String[]args)throwsExceptionBufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));Objectobject=newObject(); }}}maintestBusyThread18while(true),直到線程切換,很耗性能testLockThreadwaittingnotifypackagepackagepublicclassTestDeadThreadimplementsRunnable{inta,b;publicTestDeadThread(inta,intb){this.a=a;this.b=}publicvoidrun()synchronized(Integer.valueOf(a)){System.out.println(a+b);}}}publicstaticvoidmain(String[]args){for(inti=0;i<100;i++){}}}thread-5的鎖被thread-10.7.java動(dòng)態(tài)、反packagepackageimportimportimportjava.util.ArrayList;importimportimportpublicclassMyReflectpublicStringclassName=null;public Class=*類*@throwspublicvoidinit()throwsExceptionclassName= Class=}*獲取某個(gè)classpublicvoidgetClassName()throwsException{ }*獲取某個(gè)class文件對(duì)象的 publicvoidgetClassName2()throwsException{ }*創(chuàng)建一個(gè)classpublicvoidgetNewInstance()throwsException }@SuppressWarnings({"rawtypes","unchecked"}) =( }@SuppressWarnings({"rawtypes","unchecked"})Constructorcon= 消Java的權(quán)限檢測(cè)2=( }@SuppressWarnings({"rawtypes","unchecked"})publicvoidgetNotPrivateField()throwsException Objectobj=constructor.newInstance(100L,"zhangsan");}
Fieldfield= field.set(obj,"lisi");@SuppressWarnings({"rawtypes","unchecked"})publicvoidgetPrivateField()throwsException Objectobj=constructor.newInstance(100L);}
Fieldfield2 @SuppressWarnings({"unchecked"}) }
Objectobj= Objectobject= Objectobj Methodmethod Objectvalue=method.invoke(obj);}*publicvoidotherMethod()throwsException Class[]interfaces= for(Classclass1:interfaces){} *getResourceAsStreamname //ClassPath根下獲取,path不能以’/'ClassLoader獲 }}}service中實(shí)現(xiàn)的業(yè)務(wù)可能不能夠滿足當(dāng)先客戶的要求,需要我們重新修改serviceservice的方法不只在我們這個(gè)模塊使用,在其他模塊也在調(diào)用,其service方法已經(jīng)能夠滿足業(yè)務(wù)需求,所以我們不能只為了我們service,導(dǎo)致其他模塊授影響??梢酝ㄟ^動(dòng)態(tài)的方式,擴(kuò)展我們的service中的方法實(shí)現(xiàn),使得在原油的方法中增加的業(yè)務(wù),而不是實(shí)際修改service中的方法,這種實(shí)現(xiàn)技術(shù)就叫做動(dòng)態(tài)。動(dòng) ,,買家調(diào)用action衣服,衣服在數(shù)據(jù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025承包加工合同協(xié)議
- 2025先合同義務(wù)的內(nèi)容有什么
- 2025建設(shè)工程全過程跟蹤審計(jì)造價(jià)控制及合同
- 2025關(guān)于合同履約通知模板
- 2025技術(shù)服務(wù)咨詢合同格式樣本
- 2025農(nóng)村開發(fā)土地合同書
- 2025關(guān)于生豬合同養(yǎng)殖協(xié)議
- 2025技術(shù)合同框架式技術(shù)服務(wù)協(xié)議
- 2025水晶影象制作技術(shù)加盟合同范本
- 2025馬鞍山市商品房買賣合同(預(yù)售)示范文
- 公司領(lǐng)導(dǎo)班子設(shè)置方案
- 專業(yè)展覽展示設(shè)計(jì)搭建公司
- 為銅制劑正名-冠菌銅? 產(chǎn)品課件-9-7
- 具有磁場(chǎng)保鮮裝置的制冷設(shè)備的制作方法
- 新人教版小學(xué)五年級(jí)數(shù)學(xué)上冊(cè)知識(shí)點(diǎn)歸納總結(jié)
- 2023年湖南省農(nóng)村信用社(農(nóng)村商業(yè)銀行)招聘員工筆試參考題庫(kù)附答案解析
- 七年級(jí)上英語知識(shí)梳理(牛津上海版)U1-U4
- 人力資源典型案例匯編
- 回族做禮拜的念詞集合6篇
- 設(shè)計(jì)服務(wù)實(shí)施方案模板
- 基于PLC的兩臺(tái)電動(dòng)機(jī)順序啟動(dòng)順序停止控制設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論