




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1java34JVMjava.1.javaQQ这个软件运行时所分配的内容的独立空间中。cpu做时间片的切换其实真正电脑中的程序的运行不是同时在运行的。CPU负责程序的运行,而CPU在运行程序的过某个时刻点上,它其实只能运行一个程序。而不是多个程序。而CPU它每个程序就是进程,而每个进会有多个线程,而CPU是在这些线程之间进行切换。1ThreadMyThreadWithExtends2、实现Runnable接口的.2.java同步解synchronized(需要一个任意的对象(锁)}synchronized是javaJavaIO或者其他原因(sleep方法)被阻塞了,时间或者能够响应中断),Lock就可以办到。Lock就可以办到。Locksynchronized无法办到的。总的来说,也就是说Lock提供了比synchronized的功能。2.2locksynchronizedLocksynchronizedsynchronized不需要用户去手动释Lock则必须要用户去手动释放锁,如果没有主动释放锁,就有可能导致出现publicinterfaceLock{voidlock();voidlockInterruptibly()publicinterfaceLock{voidlock();voidlockInterruptibly()throwsInterruptedException;booleantryLock();booleantryLock(longtime,TimeUnitunit)throwsInterruptedException;voidunlock();}Locklock()、tryLock()、tryLock(longtime,TimeUnitunit)、lockInterruptibly()是用来获取锁的。由于面讲到如果采用Lock,必须主动去释放锁,并且在发生异常时,不会自动释Lock必须在try{}catch{}finally果获取失败(即锁已被其他线程获取),则返回false,也就说这个方法无论如何都会立即tryLock(longtime,TimeUnitunit)tryLock()方法是类似的,只不过区别在于这个方法在拿不到锁时会等待一定的时间,在时间期限之内如果还拿不到锁,就返回false。如果true。lckIetily方法比较特殊,当通过这个方法去获取锁时,如果线程正在等待获取锁,则这个线程能够响应中断,即中断线程的等待状态。也就使说,当两个线程同时通过lck.ckIetilyAB那么对线程B调用teadB.etB现了Lock接口的类,并且ReentrantLock提供了的方法,ReentrantLock,意思是ReentrantLock的使用案例:1,lock()的正确使用方法2,tryLock()的使用方法MyTryLockMyInterruptiblypublicinterface ockpublicinterface ockReturnsthelockusedfor*@returnthelockusedforLockReturnsthelockusedfor@returnthelockusedforLock }现了ReadWriock接口。ReentrantReadWriock里面提供了很多丰富的方法,不过最主要的有两个方法例子 果LocksynchronizedLocksynchronizedJava中的关键字,synchronized是内置的语言synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发LockunLock()去释放锁,则很可能造成死锁现象,Lockfinallyjava.1.javaJDK5.0java.util.concurrent包中,51SingleThreadExecutor:只有一个线程的线程池,因此所有提交的任务是顺序执行,代码:Executors.newSingleThreadExecutor()2CachedThreadPool:线程池里有很多线程需要同时执行,老的可用线程将被新的任务触60秒内没执行,那么将被终止并从池中删除,3FixedThreadPool:代码:Executors.newFixedThreadPool(4)4cpu的数量保持一致,获取cpuintcpuNums=Runtime.getRuntime().availableProcessors();4ScheduledThreadPool:用来调度即将执行的任务的线程池,5SingleThreadScheduledPool:只有一个线程,用来调度执行将来的任务,代码:RunnableFutureCallableFuture实例表示任务的状态.2.javaBlockingQueuejava.util.concurrent下的主要用来控制线程同步的工具。主要的方法是:put、take一对阻塞存取;add、poll一对非阻塞存取。插入add(anObject):anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,true,否则抛出offer(anObject):表示如果可能的话,将anObject加到BlockingQueue里,BlockingQueue可以容纳,则返回true,put(anObject):anObjectBlockingQueue里,BlockQueue没有空间,则调BlockingQueue里面有空间再继续. take():BlockingQueue里排在首位的对象,BlockingQueue为空,阻断进入等待状态直到Blocking有新的对象被加入为止据可能booleanremove(Objecto);从队列移除元素,如果存在,即移除一个或者,队列改truepublicbooleancontains(Objecto);查看队列是否存在这个元素,存在返回intdrainTo(Collection<?superE>c);传入的集合中的元素,如果在队列中存在,那么将intdrainTo(Collection<?superEcintmaxElements);和上面方法的区别在于,制定了移int参数来指明其大小.FIFO(先入先出)顺序排序的。2、LinkedBlockingQueue:大小不定的BlockingQueue,若其构造函数带一个规定大小的参数,生成的BlockingQueue有大小限制,若不带大小参数,所生成的BlockingQueue的大小由Integer.MAX_VALUE来决定.FIFO(先入先出)顺序排序的。LinkedBlockingQueue可以指定容量,也可以不指定,不指定的话,默认最大是Integer.MAX_VALUE,puttake方法,put方法在队列满的时候会阻塞直到有队列成员被消费,take方法在队列空的时候会阻塞,直到有队列成员被放进来。LinkedBlockingQueueArrayBlockingQueue比较起来,它们背后所用的数据结构不一样,导致LinkedBlockingQueue的数据吞吐量要大于ArrayBlockingQueue,但程数量很大时其性能的ArrayBlockingQueue.javaJMS.1.步通信。JavaAPI,绝大多数MOMJMS提供JMS是一种与厂商无关的API,用来消息收发系统消息。它类似于JDBC(JavaDatabaseConnectivity):这里,JDBC是可以用来许多不同关系数据库的API,而JMS则提供同样与厂商无关的方法以消息收发服务许多厂商都支持JMS,包括IBM的MQSeriesBEAWeblogicJMSserviceProgressSonicMQ,这只是几个例子。JMS使您能够通过消息收发服务(有时称为消息中介程序或路由器)JMS客户机向另一个JMSJMS中的一种类型对象,由两部分组成:报头和消息主体。(TextMessage)、可序列化的对象(ObjectMessage)、属性集合(MapMessage)、字节流(BytesMessage)、原始值流(StreamMessage),还有无有效负载的消息(Message)。.2.JMSJMS(JavaMessagingService)Java平台上有关面向消息中间件(MOM)的技术规范,它便Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的Java消息服务。JMSJMSJMSJMSJMSJMSJMSJMS队列:一个容纳那些被发送的等待阅读的消息的区域。与队列名字所暗示的意思不同,Java中消息。这里,生产者知道消费者的队列,并直接将消息发送到消费者的队列。发布者/订阅者模型支持向一个特定的消息发布消息。0或多个订阅者可能对接收来自比是公告板。Java语言,JMSJava类可以通过JNDI中关于提供者的信息,连接不同的JMS提供者。这一组类首先使用接工厂ActiveMQ去 QueueJMSJavaJMS提供者,管理会话和队列。既有开源的提供者ApacheJBossHornetQCoridanTheOpenJMSGroupBEABEAWebLogicServerJMSTIBCOSoftwareEMSGigaSpaces的GigaSpacesSoftwired2006iBusIONA的IONASeeBeyondIQManager(20058SunMicrosystems并购webMethodsJMSmy-channelsNirvanaSonicSoftwareSonicMQSwiftMQSwiftMQIBM的WebSpherejavaJVM.1.java工具使jconsole是一种集成了上面所有命令功能的可视化工具,可以分析jvm的内存使用情况JDK/bin下的“jconsole.exeJconsole后,将自动搜索出本机运行的所有虚拟机进程,不需要用户使用jps来查询了,双击其中一个进程即可开始。也可以“连接服务器,进行虚拟机的。”提供了和jconsole.2.javaJava虚拟机在执行Java程序的过,会把它所管理的内存划分为若干个不同的数据如上图所示,Java虚拟机运行时数据区域被分为五个区域:堆(Heap)、栈(Stack)、本地方法栈(NativeStack)、方法区(MethodArea)、程序计数器(ProgramCountRegister)。堆对于大多数应用来说,JavaHeapJava虚拟机管理的内存的最大一块,这块区域随着JavaHeap是一块共享的区域,操作共享区域的成与JavaHeap相关的还有Java的回收机制(GC),JavaHeap是回收器管理的主要区域。程序猿所熟悉的、老生代、永久代的概念就是在堆里面,现在大多数的GC基本都采用了分代收集算法。如果再细致一点,JavaHeapEden空间,FromSurvivor空间,ToSurvivor空间等。栈Java方法执行时的内存模型,每个方法执行时都会创建一个栈帧(StackFrame)型,对象等信息。本地方法栈(Native本地方法栈(NativeStack)与Java虚拟(JavaStack)所发挥的作用非常相似,他java方法(也就是字节码)服务,而本地方法Native方法服务。方法区(Method方法区(MethodArea)与堆(JavaHeap)一样,是各个线程共享的内存区域,它用于虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。虽然JavaJava虚拟机栈(JavaStack)本地方法栈(NativeStack)2堆(JavaHeap).3.GC.3.2.算法2、当这一块的内存用完了,就将还存活着的对象到另外一块上面,然后再把已使用过.3.3.标记-整理算法 1.3.4.分代收集算法(Generational3、在中,每次收集时都发现有大批对象死去,量存活,那就选用算法,只需要付出少量存活对象的成本就可以完成收集。.4.回收Serial1、是一个单线程的收集器,“StopTheSerialOld JDK1.5ParallelScavenge收集器搭配使用ParNew2CPU3、Server模式下首选,目前只有它能与CMS收集器配合工4、使用-XX:+UseConcMarkSweepGC选项后的默认收集器,也可以使用-2、收集器,算法,并行的多线程收集4、吞吐量=运行用户代码时间/(运行用户代码时间+收集时间),虚拟机总共运行100分钟,其中收集花掉1分钟,那吞吐量就是99%-XX:+UseAdaptiveSize:动态设置大小、Eden与Survivor区的比例、晋升老年代对象ParallelOld2CPUParallelScavenge加ParallelCMS2、非常符合互联或者B/S系统的服务端上,重视服务的响应速度,希望系统停顿时间重新标记,StopTheWorld并发清除(CMSconcurrentsweep)7 Failure1、收集器技术发展的最前沿成果之2、G1是一个适用于服务器端、大内存、多CPU情景的收集器,主要目标是在维持高效率回收(highthoughput)的同时,提供软实时中断特性。用户可以指定一个时间上限,如果回收导致的程序暂停超过了用户设定的时间上限,会打断回收,恢复程序的执行。M初始标记:标记一下GCRoots能直接关联到的对象,需要停顿线程,但耗时很短GCRoot开始对堆中对象进行可达性分析,找出存活的对象,这阶RegionGC停顿G1CMSCMS的“标记——清理”算法,G1会使用压缩算法,保证不产生多余的碎片。收集阶段,G1会将某个区域存活的对象拷贝的其他区域,然后将整个区域整个回收。间范围内,G1会选择适当的区域进行收集,确保停顿时间不超过用户指定时间。-XX:+UnlockExperimentalVMOptionsXX:+UseG1GCG1-XX:+UseConcMarkSweepGC使用CMS-XX:ParallelGCThreads=n:CPU数。.5.JVM - - - - - -- -此值可以设置与-Xmx相同,以避免每次JVM整个堆大小=++64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun推荐配置为整个3/8。JDK5.01M,在相同物理内存下,减小这个值能生成的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~500041:41/54SurvivorEden2:4Survivor 最 0Survivor行多次,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。--- --.6.jvm内存相当于可视化的jstat命令,用于监视收集器管理的虚拟机内存(java堆和永我们通过下面的一段代码体验一下它的监视功能。运行时设置的虚拟机参数为: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{}}区都基本上被清空了,但是老年代仍然保持峰值状态,这说明,填充的数据在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动态、反packagepackageimportimportimportjava.util.ArrayList;importimportimportpublicclassMyReflectpublicStringclassName=null;public Class=*类*@throwspublicvoidinit()throwsExceptionclassName= Class=}*获取某个classpublicvoidgetClassName()throwsException{ }*获取某个class文件对象的 publicvoidgetClassName2()throwsException{ }*创建一个classpublicvoidgetNewInstance()throwsException }@SuppressWarnings({"rawtypes","unchecked"}) =( }@SuppressWarnings({"rawtypes","unchecked"})Constructorcon= 消Java的权限检测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中实现的业务可能不能够满足当先客户的要求,需要我们重新修改serviceservice的方法不只在我们这个模块使用,在其他模块也在调用,其service方法已经能够满足业务需求,所以我们不能只为了我们service,导致其他模块授影响。可以通过动态的方式,扩展我们的service中的方法实现,使得在原油的方法中增加的业务,而不是实际修改service中的方法,这种实现技术就叫做动态。动 ,,买家调用action衣服,衣服在数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深海养殖环境友好型材料应用-洞察及研究
- 未来城市中商业地产的发展趋势预测-洞察及研究
- 深海沉积物与生物相互作用-第1篇-洞察及研究
- 老龄化认知衰退预防-洞察及研究
- 大数据智能处理-洞察及研究
- 跨国税务筹划法律风险应对-洞察及研究
- 精准诊断与智能维护-洞察及研究
- 服务质量评估模型-洞察及研究
- 虚拟化网络性能提升-洞察及研究
- 营养师实操技能提升考试重点试题解析
- GB/T 17642-2025土工合成材料非织造布复合土工膜
- 《医用细胞生物学》课件:线粒体的功能与疾病
- 金融科技监管法律法规-全面剖析
- 道路运输岗位管理制度
- 保密知识课件下载
- 典型故障波形分析(电力系统故障分析课件)
- 2025监理工程师教材水利
- 江苏高中英语牛津译林版新教材必修一词汇(默写版)
- 直接证明与间接证明课件新人教选修
- 土石方运输合同协议
- 2025年江苏启晟集团有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论