JAVA网页设计Optimizeit Thread Debugger概览
用java开发web只要两本书:一本是关于java基础的,一本是关于jsp、servlet的就可以了。开发周期长,我就来讲句题外话,现在有很多思想都是通过java来展现。debugOptimizeitThreadDebugger概览本文经由过程先容OptimizeitThreadDebugger的一些次要特性来使你对它有个扼要的懂得。假如想要懂得更多的信息,请检察OptimizeitThreadDebugger用户手册,也能够从OptimizeitThreadDebugger单击主菜单info|help来检察一切的利用文档。利用中有何成绩,请随时与BorlandTechnicalSupport接洽。测试java程序OptimizeitThreadDebugger是从运转程序的假造机中搜集程序的掩盖信息的。起首要运转一个java程序,您必要安装一个java假造机。OptimizeitThreadDebugger默许安拆卸置JDK1.4or1.4.1。假如你想利用别的的假造机,能够检察OptimizeitThreadDebugger用户手册的怎样增添新的假造机部分。从运转程序的假造机中搜集程序的掩盖信息的。起首要运转一个java程序,您必要安装一个java假造机。OptimizeitThreadDebugger默许安拆卸置JDK1.4or1.4.1。假如你想利用别的的假造机,能够检察OptimizeitThreadDebugger用户手册的怎样增添新的假造机部分。启动使用程序OptimizeitThreadDebugger能够测试任何范例的java程序,好比尺度使用程序,使用小程序,servlets,JSPs,EJBs。本文所利用的测试程序包括在doc hread_debuggerquicktour目次下。一切的测试都是在OptimizeitThreadDebugger中举行的:翻开OptimizeitThreadDebugge。假如你是第一次翻开,将会主动弹出编纂设置窗口。假如已翻开,能够从file菜单下选择newsetting,修改编纂设置窗口。在程序范例框当选择Application。单击"ProgrammainclassorJarfile"左面的“Browse…”按钮。找到doc hread_debuggerquicktourThreadDExample.class文件,然后单击open。OptimizeitThreadDebugger会前往到设置窗口,而且主动带进程序的事情区和类路径。在SourcePath框中,单击change…按钮。在Sourcepathchooser窗口中,选择安装路径下的doc hread_debuggerquicktour目次;选中后单击窗口中的向下按钮把它到场到sourcepath部分。单击ok增添到源文件中路径中。设置好后的对话框以下:选中Openaconsole选项;这长短常主要的,由于这个程序必要输出一些命令来运转。单击Startnow按钮。编纂设置窗口会主动封闭,OptimizeitThreadDebugger会启动被测程序。检察线程ThreadDebugger默许翻开的是线程监督窗口。你也能够从头界说默许翻开的窗口来查找程序在那里挂起了大概是对照耗时:程序启动后,OptimizeitThreadDebugger翻开了一个DOS窗口,在DOS窗口中输出1,然后按回车键入手下手第一轮测试。ThreadDebugger窗口中会显现以后运转的线程和他们各自的运转形态:全部过程当中窗口中会利用分歧的色彩条来显现以后的线程运转形态:运转形态(绿色)暗示线程正在运转并利用CPU。梗塞形态(黄色)暗示该线程没有运转,由于在进进monitor时产生了堵塞。守候形态(白色)暗示线程正在守候monitor的关照与其他线程共享资本。守候输出输入形态(紫色)暗示该线程的当地代码没有实行任何的历程。这经常是因为一个输出/输入操纵操纵引发的,但也有多是别的情形招致给代码没有分派利用CPU而酿成的。注重:当响应的线程形态应当被更新而未更新时,Optimizeit会在色彩条中显现一些点。当测试程序加入或没有搜集到信息时,未知形态的地区也将以分歧范例的图案来显现。先选中主线程"main",然后单击I/O-WaitingView切换到守候I/O监督窗口:双击第三行,能够从源代码窗口中看到产生守候的那行代码。该程序基础上都利用了尺度的输出来办法。封闭源码窗口并前往到线程举动监督窗口。在线程窗口中也能够拔取某一段来剖析该工夫内的一些信息。前往到把持窗口而且输出2,然后单击回车启动第二轮测试(利用了小的毗连)。ThreadDebugger显现了以后正在运转的线程的形态。你会看到在入手下手的某段工夫内有10个线程在运转。在线程举动监督窗口,拖动转动条到方才的这段工夫局限内。假如不想持续检察线程举动信息,能够作废选中窗口右下方的Updatecontinuously选项,如许窗口中的信息就不会随工夫变更了。在这段工夫内黄色地区暗示响应的线程梗塞在一个monitor中。在线程条上间接单击黄色条上恣意一部分,并按住鼠标左键向右挪动。如许就选中了该工夫段:选中工夫段后:单击ContentionView来剖析为何线程在进进monitors时会产生堵塞。该信息暗示的仅是选择工夫段的。单击WaitingView来研讨线程在那里守候monitors。一样,该信息也仅仅是所选工夫局限的,以是应选择图中白色条部分的地区。注重:假如线程已加入大概已不存在该线程名在窗口中就会以斜体显现。了解线程争用在java多线程的使用程序中假如很多线程同时必要一样的monitors(可译为监督器或管程),就会形成严峻的功能瓶颈。Monitors是被用来回护共享资本被多个线程同时挪用的,每个对象都有一个monitors,同时只同意一个线程持有monitors从而举行对对象的会见,那些没有取得monitors的线程必需守候,直到持有monitors的线程开释monitors。这部分被monitors回护起来的代码,我们称之为临界区。为了优化功能,我们常常要尽量地坚持小的临界区,出格是当临界区在实行一些不耗用CPU资本的历程时。假如一个线程在临界地区内因为守候输出输入而形成守候,它就不再利用CPU资本。但是,假如其他的线程也守候这个monitors的话就就不克不及充实使用CPU资本。上面我们用实例来讲明这个成绩:从头启动被测试程序。程序启动后,在DOS窗口中输出1并按下回车键启动争用较年夜的示例。你会注重到在某段工夫内有10个线程在运转。在线程窗口,拖动窗口上面的转动条前往到这段工夫,而且作废选中"Updatecontinuously":能够看到此例中相对实践利用CPU的工夫来讲争用monitor所消费的工夫更长。为了更周全地懂得这个情形,选中任何线程(比方线程7)而且单击ContentionView切换到争用检察窗口:因为争用ContentionExample$Consumer.run()办法100%的工夫花在了梗塞上,争用监督把持台上显现了一切与该争用有关的monitor。选中java.lang.Objectmonitor。争用具体申明把持台就会显现列出一切与该争用有关的线程,包含甚么时分产生了争用。翻开第一个线程:在ContentionExample$Consumer.run()行上双击就会弹出该办法的源代码。在源码窗口显现线程7正在猎取monitor,但是源码窗口下方显现线程1同时也在猎取monitor:在被monitor“lock”回护的临界部分,此例中挪用了办法processData()。该办法用1毫秒来摹拟输出输入。此例申明了利用过量的争用会支付很年夜价值。关于利用几毫秒cpu资本来讲,每一个线程也许堵塞1秒。为了下降争用的产生,当确认临界区不再守候争用时,有需要使临界区最小化。我们的办理举措很复杂,就是经由过程扫除不必要同步处置的数据来处置减少临界区。如许代码调剂为:synchronized(lock){a=dataSourceA.nextElement();b=dataSourceB.nextElement();}processData(a,b);演示程序中也包括了测试useBigLock标记的情形。切换到线程监督窗口。重启被测程序,在DOS窗口中输出2后按下回车键运转第二个测试。第二个测试也利用的一样的代码,可是此次useBigLock标志被置为false。争用工夫下降到了每一个线程只要几毫秒。这里有一些技能来避免因为争用而引发的功能成绩:只管使临界区最小。仅包括必要被回护的语句。锁定大概最低的级别。在synchronized办法前加上explicitsynchronized()语句。同步办法利用起来很便利,可是也大概招致过量的争用,仅仅由于跟着工夫的增加办法趋势于庞大化。不要在临界区实行一个I/O操纵,除非独一的目标是为了回护I/O形貌符大概对象常常实行I/O操纵。推测争用的级别几近是不成能的。经由过程监督线程窗口,每次严重的变更城市看到有难以了解的争用级别。了解逝世锁多线程的使用程序所面临的配合成绩是,当一些线程因为不克不及取得其所需的资本以致线程被挂起。逝世锁对仓库来讲是极年夜的应战,由于它常常很少呈现乃至不克不及复现。一个少少呈现逝世锁也有大概招致一个web使用程序长工夫被挂起,并引发资本华侈。OptimizeitThreadDebugger供应了两个强无力的特性使调试逝世锁变得简单。第一是给开辟职员供应逝世锁产生的地位。第二个特性将鄙人一部分来讲明,是匡助开辟职员来监督使用程序的运转,而且一旦有大概产生逝世锁会实时给出提醒。单击MonitorView按钮切换到显现实行临界部区一切的线程和监督器的窗口。默许情形下该窗口的内容是及时显现并每秒都更新的。假如有需要,重启被测试程序并在DOS窗口种输出3然后回车来运转一个逝世锁的例子。这个逝世锁是因为一个同步的参数毛病引发的:单击图中的任一个按钮,响应的栈轨迹就会显现在窗口的下方。能够双击某一行来检察响应的源码。线程色彩所暗示的形态与线程窗口中所暗示的一样。一旦单击毗连图中的一个按钮,监督内容就不再更新。能够再次单击该按钮大概从头进进该窗口图就能够持续坚持更新。监督程序的逝世锁因为重现和了解逝世锁是对照坚苦的,基于这类情形,OptimizeitThreadDebugger供应了一个线程剖析器。当一个java程序运转时线程剖析器纪录并监督一切的同步举动。然后搜刮任何一个有大概招致逝世锁的范例而且给出一个告诫大概毛病信息的列表,包括临界区的具体材料,诸如那里会有有大概产生逝世锁和挪用了谁人线程。OptimizeitThreadDebugger会注重监督以下一些体现非常的锁范例:锁的按次:两个线程间接大概一连地以分歧的按次进进统一个monitors。锁和守候:线程进进一个monitors然后守候进进其他的monitors。锁和I/O守候:线程进进一个monitors然后中断实行任何的义务。除非两个线程永久不会同时运转,锁的按次成绩常常预示着有被锁逝世的风险。对Lock-and-wait和Lock-and-I/O-wait范例的锁,预示着情形对照一般,假如监督器的目标是限定对正在守候大概正在实行输出输入的资本的会见。为了证明会产生逝世锁,本文所指的示例程序中会有3个线程会同时进进统一个监督器来猎取数据。每一个线程都利用了随机函数挪用,如许偶然它们会以分歧的按次进进监督器。这个程序仅仅用来演示,但是能够细想当多个线程在一个年夜的使用程序中运转而且当处置一些临界区时以分歧的按次进进监督器会产生甚么样的情形。本例在实行过程当中常常会产生逝世锁,可是不管是不是真正地产生逝世锁OptimizeitThreadDebugger剖析器都将报告一些告诫信息和产生的毛病信息:若有需要请从头翻开示例程序。单击MonitorUsageAnalyzer按钮。单击Record入手下手纪录测试历程。在程序启动后会弹出一个DOS窗口,在窗口中输出4并按回车键入手下手程序的运转。注重:剖析器也能够经由过程选择编纂设置窗口中的"startanalyzer"选项来启动。当以必定的按次产生堵塞时窗口中显现标记>,以别的的按次产生堵塞时显现标记<。最初,程序会中断,可是再不会呈现菜单。这意味着产生了逝世锁。按下回车键能够从头显现菜单:再次单击Record中断纪录。选择第一条毛病信息并切换到剖析窗口:在办法名上单击修改源代码。封闭源码窗口前往到监督器利用剖析窗口。这里有一些制止发生逝世锁的技能:尽量让锁复杂。两个线程利用一个monitors来共享资本不会产生逝世锁,一样他们永久不会在临界区时代产生堵塞。在进进monitors后不要实行输出输入操纵,除非该监督器是用于回护输出输入的。当进进另外一个monitors时不要守候另外一个monitors,除非完整有需要而且是可了解的。老是以一样的按次进进monitors。当持有一个锁时不要挪用大众的synchronized办法。活锁过量在多线程的使用程序中另外一类典范的成绩是有过量的锁。当假造机被优化后,可以十分快地进进多个monitors,削减monitors的利用就能够极年夜地进步功能。OptimizeitProfiler可以用来器度每一个办法利用了多长工夫,包含进进monitors的工夫,而OptimizeitThreadDebugger可以使开辟职员懂得监督器利用的频次和地位,不管争用是不是产生过:在线程窗口选择一个线程或一个工夫局限后单击MonitorEnterView按钮切换到进进monitors具体信息检察窗口。比方,在选择main类后单击呈现以下所示的窗口:能够看到main类进进了22个monitor。本文只是OptimizeitThreadDebugger的一个概览。假如想要懂得更多有关Optimizeit的信息,请检察OptimizeitThreadDebugger用户指南。翻译:wyingquan@hotmail.com工夫:2004-11-11假如您对本文或白盒测试感乐趣,请登录http://groups.yahoo.com/group/WhiteBoxTestCN/,到场会员,便可下载到本文完全的内容(格局为呆图片的word文档),在这里另有其他一些白盒测试工具的先容与相干会商。最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 Java是一种计算机编程语言,拥有跨平台、面向对java Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 是一种为 Internet发展的计算机语言 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 是一种突破用户端机器环境和CPU 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
页:
[1]