`
xiaolanglang123
  • 浏览: 26009 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
文章分类
社区版块
存档分类

应对编程困难的JAVA小技巧

阅读更多

现在在编程语言界,JAVA已经得到很多编程小伙伴的青睐,但是真正懂得使用它的技巧的人不知道现在有多少.

很多开发者觉得自己懂Java编程,事实是大多数开发人员都只领会到了Java平台的皮毛,所学也只够应付工作。我们今天将深度挖掘Java平台的核心功能,揭示一些鲜为人知的事实,帮助您解决最棘手的编程困难。

当应用程序性能受到损害时,大多数开发人员都惊慌失措,这在情理之中。跟踪Java应用程序瓶颈来源一直以来都是很麻烦的,因为Java虚拟机有黑盒效应,而且Java平台分析工具一贯就有缺陷。

然而,随着Java5中JConsole的引入,一切都发生了改变。JConsole是一个内置Java性能分析器,可以从命令行或在GUIshell中运行。它不是完美的,但是当尖头老板来问你关于性能的问题时,用它来应对还是绰绰有余的——这比查询PapaGoogle要好得多。

我们将向您展示5个方法,使您可以轻松地使用JConsole(或者,它更高端的“近亲”VisualVM)来监控Java应用程序性能和跟踪Java中的代码。

1.     JDK附带分析器

许多开发人员没有意识到从Java 5开始JDK中包含了一个分析器。 JConsole(或者Java平台最新版本,VisualVM)是一个内置分析器,它同Java编译器一样容易启动。如果是从命令行启动,使JDK在PATH上,运行jconsole即可。如果从GUIshell启动,找到JDK安装路径,打开bin文件夹,双击jconsole。

当分析工具弹出时(取决于正在运行的Java版本以及正在运行的Java程序数量),可能会出现一个对话框,要求输入一个进程的URL来连接,也可能列出许多不同的本地Java进程(有时包含JConsole进程本身)来连接。

使用JConsole进行工作

在Java 5中,Java进程并不是被设置为默认分析的,而是通过一个命令行参数—-Dcom.sun.management.jmxremote——在启动时告诉Java 5 VM打开连接,以便分析器可以找到它们;当进程被JConsole捡起时,您只能双击它开始分析

分析器有自己的开销,因此最好的办法就是花点时间来弄清是什么开销。发现JConsole开销最简单的办法是,首先独自运行一个应用程序,然后在分析器下运行,并测量差异。(应用程序不能太大或者太小;我最喜欢使用JDK附带的SwingSet2样本。)因此,我使用-verbose:gc尝试运行SwingSet2来查看垃圾收集清理,然后运行同一个应用程序并将JConsole分析器连接到它。当JConsole连接好了之后,一个稳定的GC清理流出现,否则不会出现。这就是分析器的性能开销。

JConsole或VisualVM?

JConsole从Java 5开始就随着Java平台版本一起发布,而VisualVM是在NetBeans基础上升级的一个分析器,在Java 6的更新版12中第一次发布。多数还没有更新到Java 6,因此小编主要介绍JConsole。然而,多数技巧和这两个分析器都有关。

2.远程连接进程  

 因为Web应用程序分析工具假设通过一个套接字进行连通性分析,您只需要进行少许配置来设置JConsole(或者是基于JVMTI的分析器,就这点而言),监控/分析远程运行的应用程序。

如果Tomcat运行在一个名为“webserve”的机器上,且JVM已经启动了JMX并监听端口9004,从JConsole(或者任何JMX客户端)连接它需要一个JMX URL“service:jmx:rmi:///jndi/rmi://webserver:9004/jmxrmi”。

基本上,要分析一个运行在远程数据中心的应用程序服务器,您所需要的仅仅是一个JMX URL。

3.跟踪统计

JConsole有许多对收集统计数据有用的选项卡,包括:

◆Memory:在JVM垃圾收集器中针对各个堆跟踪活动。
◆Threads:在目标JVM中检查当前线程活动。
◆Classes:观察VM已加载类的总数。

这些选项卡(和相关的图表)都是由每个Java 5及更高版本VM在JMX

服务器上注册的JMX对象提供的,是内置到JVM的。一个给定JVM中可用bean的完整清单在MBeans选项卡上列出,包括一些元数据和一个有限的用户界面来查看数据或执行操作。(然而,注册通知是在JConsole用户界面之外。)

使用统计数据

假设一个Tomcat进程死于OutOfMemoryError。如果您想要弄清楚发生了什么,打开JConsole,单击Classes选项卡,过一段时间查看一次类计数。如果数量稳定上升,您可以假设应用程序

服务器或者您的代码某个地方有一个 ClassLoader漏洞,不久之后将耗尽PermGen空间。如果需要更进一步的确认问题,请看Memory选项卡。

不要成为典型

发现应用程序代码中性能问题的常用响应多种多样,但也是可预测的。早期的Java编程人员对旧的IDE可能十分生气,并开始进行代码库中主要部分的代码复查,在源代码中寻找熟悉的“红色标志”,像异步块、对象配额等等。随着编程经验的增加,开发人员可能会仔细研究JVM支持的-X标志,寻找优化垃圾收集器的方法。当然,对于新手,直接去Google查询,希望有其他人发现了JVM的神奇的“make it go fast”转换,避免重写代码。

从本质上来说,这些方法没什么错,但都是有风险的。对于一个性能问题最有效的响应就是使用一个分析器——现在它们内置在Java平台,我们确实没有理由不这样做!

4.为离线分析创建一个堆转储

生产环境中一切都在快速地进行着,您可能没有时间花费在您的应用程序分析器上,相反地,您可以为Java环境中的每个事件照一个快照保存下来过后再看。在JConsole中您也可以这样做,在VisualVM中甚至会做得更好。

先找到MBeans选项卡,在其中打开com.sun.management节点,接着是HotSpotDiagnostic节点。现在,选择Operations,注意右边面板中的“dumpHeap”按钮。如果您在第一个(“字符串”)输入框中向dumpHeap传递一个文件名来转储,它将为整个JVM堆照一个快照,并将其转储到那个文件。

稍后,您可以使用各种不同的商业分析器来分析文件,或者使用VisualVM分析快照。(记住,VisualVM是在Java 6中可用的,且是单独下载的。)

5.JConsole并不是高深莫测的

作为一个分析器实用工具,JConsole是极好的,但是还有更好的工具。一些分析插件附带分析器或者灵巧的用户界面,默认情况下比JConsole跟踪更多的数据。

JConsole真正吸引人的是整个程序是用“普通旧式Java”编写的,这意味着任何Java开发人员都可以编写这样一个实用工具。事实上,JDK其中甚至包括如何通过创建一个插件来定制JConsole的示例。建立在NetBeans顶部的VisualVM进一步延伸了插件概念。

如果JConsole(或者VisualVM,或者其他任何工具)不符合您的需求,或者不能跟踪您想要跟踪的,或者不能按照您的方式跟踪,您可以编写属于自己的工具。如果您觉得Java代码很麻烦,Groovy或JRuby或很多其他JVM语言都可以帮助您更快完成。

您真正需要的是一个快速而粗糙(quick-and-dirty)的由JVM连接的命令行工具,可以以您想要的方式确切地跟踪您感兴趣的数据。

Java性能监控不止于JConsole或VisualVM——在JDK中隐藏着一整套工具,只是大多数开发人员并不知道。

今天小编为java的小伙伴们分享到此结束,希望以上这5​件​J​a​v​a​性​能​监​控​小​技​巧​:​应​对​编​程​困​难,能够给你们带来编程上的帮助.

 

文章来源:http://www.alqsoft.com/xinwenzixun/javakaifa/2014/0606/101.html

分享到:
评论

相关推荐

    Java并发编程的艺术

    #### 一、并发编程的挑战与应对策略 本书开篇即指出,随着现代计算机系统越来越依赖于多核处理器的并行计算能力,Java开发人员面临着前所未有的并发编程挑战。这些挑战包括但不限于数据一致性问题、死锁、资源竞争...

    java实训心得体会(精选4篇)参考.doc

    【Java实训心得体会】 Java实训是将理论知识转化为实践能力的重要环节。...在今后的学习中,我会继续努力,不断提升自己的编程技巧和软件开发能力,以适应不断发展的信息技术需求,为未来的职业生涯奠定坚实的基础。

    Java的ecc算法.doc

    ### Java的ECC算法 #### ECC(椭圆曲线加密)简介 ...通过对ECC基本原理的深入理解以及Java编程技巧的掌握,开发者可以更好地应对现代网络安全挑战,特别是在资源受限的环境中实现高效的数据保护。

    Java面试考核目标.docx

    - **考核点**:掌握至少一种主流编程语言(如Java),熟悉其语法特点、数据结构、异常处理机制等。 - **考核基准**: - 初级:能够理解基本语法并编写简单的程序。 - 中级:能够熟练运用面向对象的思想进行编程...

    java面试宝典

    《Java面试宝典》是为Java开发者量身打造的一份面试指南,旨在帮助求职者在面试过程中展现出最佳的专业技能和综合素质。以下将详细介绍其中涵盖的关键知识点: 一、面试含义 面试是雇主与应聘者之间面对面的交流...

    java程序员面试自我介绍范例.pdf,这是一份不错的文件

    不宜直接说出可能影响工作的重大缺点,可以提及一些相对较小但正在努力改进的不足,比如时间管理或公众演讲能力,并强调自己已经在积极改善。 在准备面试时,除了这些技巧,更重要的是扎实的专业技能。面试成功的...

    java初学者问题——能看懂,不会写怎么办?

    Java初学者在学习过程中经常会遇到一个普遍的问题:能理解理论,但实际动手编写代码时却感到困难重重。这种现象往往源于理论与实践之间的鸿沟,以及对错误调试和编程技巧的不熟悉。针对这种情况,有几种有效的应对...

    poj中难度较小的题目

    POJ是一个面向全球程序员的在线编程竞赛平台,它提供了大量的编程题目供用户进行练习和挑战,涵盖了许多编程语言如C、C++、Java等。题目难度各异,从入门级的简单题目到复杂的算法难题都有。对于初学者来说,选择...

    Think Python How to Think Like a Computer Scientist

    作者希望逐步构建内容,避免陷阱门效应,把最困难的主题拆分为一系列的小步骤,并将重点放在编程本身而不是编程语言上。作者只包含Java的最小实用子集,并省略了其他部分。作者急需一个书名,并选择了“像计算机科学...

    英语面试小集合,个人简历词汇大全

    这些文档涵盖了从撰写推荐信到面试技巧的多个方面,对于准备Java等IT岗位的英语面试尤其有帮助。通过深入学习和实践,你可以提高自己的英语表达能力,增加在面试中的自信心,从而增加成功获得理想工作的机会。

    【eoeAndroid特刊】第7期+NDK.rar

    2. 调试困难:相比于Java,原生代码的调试工具和过程较为复杂,需要熟悉GDB等调试工具。 3. 内存管理:NDK中的内存管理是手动进行的,容易引发内存泄漏和悬挂指针等问题,需要谨慎处理。 4. APK大小:原生库通常会...

    acm题库。rar

    比赛的核心在于设计出高效算法,并用编程语言实现,常见的编程语言有C、C++、Java等。比赛过程中,队伍可以提交多次代码,每次提交后系统会自动运行测试数据,给出正确性反馈。 ACM题库通常包含各种类型的问题,如...

    Leetcode刷题笔记.zip

    总之,“Leetcode刷题笔记.zip”是一个宝贵的资源,它将帮助读者系统地掌握算法和数据结构,提高编程技能,并为应对技术面试做好充分准备。无论你是初学者还是经验丰富的开发者,这份笔记都将是你提升自我、挑战自我...

    计算机实习日记集合八篇.pdf

    7. **技术学习与挑战**:学习Java相关开源框架(Struts、Spring、Hibernate),并在Eclipse和MyEclipse环境下进行开发,遇到了版本兼容性和选择困难,同时也意识到英语阅读能力对于理解开源文档的重要性。...

    信息技术应用能力提升工程—学习小测试—温馨提示.pdf

    2. 编程和开发能力:涉及常用编程语言(如Java、Python、C#等)的掌握,以及可能的框架和库(如AngularJS、React、.NET等)的使用。对于开发人员来说,这是基础技能的延伸和深化。 3. 网络技术与安全管理:网络设计...

    ACM NOI CSP比赛的一些经验

    在ACM NOI CSP(中国计算机学会的青少年信息学奥林匹克竞赛)比赛中,参赛者们需要具备扎实的编程基础、算法理解能力和快速解决问题的技巧。这里,我们根据提供的标题和描述,结合可能包含在“ACM NOI CSP比赛的一些...

    TourInfernale

    地狱之塔是一款富有挑战性的棋盘游戏,玩家需要通过策略和技巧来征服这座充满困难的塔。在这个项目中,我们将使用Java编程语言来开发一个能够模拟游戏过程并进行智能决策的人工智能。Java是一种广泛应用于各种领域的...

Global site tag (gtag.js) - Google Analytics