昆明java培训
达内昆明广州春城路

18487146383

热门课程

Java程序性能分析

  • 时间:2015-11-01
  • 发布:达内科技
  • 来源:达内昆明


达内昆明java培训今天给大家介绍一下关于Java的性能,我想很多人对于手机、电脑性能有所了解,对于Java是不不懂了,没关系昆明java培训机构,为你讲解。

VisualVM,对Java应用程序做性能分析和调优,这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。

Java程序性能分析

在内存分析上,Java VisualVM的最大好处是可通过安装Visual GC插件来分析GC(Gabage Collection)趋势、内存消耗详细状况。

一 Visual GC(监控垃圾回收器)

Java VisualVM默认没有安装Visual GC插件,需要手动安装,JDK的安装目录的bin目露下双击jvisualvm.exe,即可打开Java VisualVM,点击菜单栏 工具->插件 安装Visual GC。

安装完成后重启Java VisualVM,Visual GC界面自动打开,即可看到JVM中堆内存的分代情况。

现在跟着达内昆明java培训来学习Java虚拟机的一些基本概念:

堆(Heap) :JVM管理的内存叫堆。

分代:根据对象的生命周期长短,把堆分为3个代:Young,Old和Permanent,根据不同代的特点采用不同的收集算法,扬长避短也。

GC的基本概念:gc分为full gc 跟 minor gc,当每一块区满的时候都会引发gc。

Scavenge GC:一般情况下,当新对象生成,并且在Eden申请空间失败时,就触发了Scavenge

GC,堆Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理Survivor的两个区。

Full GC:对整个堆进行整理,包括Young、Tenured和Perm。Full GC比Scavenge,GC要慢,因此应该尽可能减少Full GC。有如下原因可能导致Full GC:

上一次GC之后Heap的各域分配策略动态变化

System.gc()被显示调用

Perm域被写满

Tenured被写满

VisualVM 的线程标签提供了三种视图,默认会以时间线的方式展现。

3.Profile界面(性能剖析)

在 Profiler 标签,点击“CPU”按钮启动一个 CPU 性能分析会话 ,VisualVM 会检测应用程序所有的被调用的方法。当进入一个方法时,线程会发出一个“method entry”的事件,当退出方法时同样会发出一个“method exit”的事件,这些事件都包含了时间戳。然后 VisualVM 会把每个被调用方法的总的执行时间和调用的次数按照运行时长展示出来。

此外,我们也可以通过性能分析结果下方的方法名过滤器对分析结果进行过滤。

4.快照功能

我们可以使用 VisualVM 的快照功能生成任意个性能分析快照并保存到本地来辅助我们进行性能分析。快照为捕获应用程序性能分析数据提供了一个很便捷的方式因为快照一旦生成可以在任何时候离线打开和查看,,也可以相互传阅。

VisualVM 提供了两种类型的快照:

Profiler 快照:当有一个性能分析会话(内存或者 CPU)正在进行时,我们可以通过性能分析结果工具栏的“快照”按钮生成 Profiler 快照捕获当时的性能分析数据。

应用程序快照:我们可以右键点击左侧 Applications 窗口中应用程序节点,选择“应用程序快照”为生成一个应用程序快照。应用程序快照会收集某一时刻的堆转储,线程转储和 Profiler 快照,同时也会捕获 JVM 的一些基本信息。

Profiler 快照

应用程序快照

5.堆dump(转储)和线程dump(转储)操作

线程转储的生成与分析

VisualVM 能够对正在运行的本地应用程序生成线程转储,把活动线程的堆栈踪迹打印出来,帮助我们有效了解线程运行的情况,诊断死锁、应用程序瘫痪等问题。

堆转储的生成与分析

VisualVM 能够生成堆转储,统计某一特定时刻 JVM 中的对象信息,帮助我们分析对象的引用关系、是否有内存泄漏情况的发生等。

Dump文件是进程的内存镜像,可以把程序的执行状态通过调试器保存到dump文件中,堆dump的dump文件内容如下图所示

当 VisualVM 统计完堆内对象数据后,会把堆转储信息显示在新的堆转储标签内,我们可以看到摘要、类、实例数等信息以及通过 OQL 【对象查询语言是专门为ODMG(Object Database Management Group)对象模型制定的查询语言】控制台执行查询语句功能。

堆转储的摘要包括转储的文件大小、路径等基本信息,运行的系统环境信息,也可以显示所有的线程信息

从类视图可以获得各个类的实例数和占用堆大小数,分析出内存空间的使用情况,找出内存的瓶颈,避免内存的过度使用。

通过实例数视图可以获得每个实例内部各成员变量的值以及该实例被引用的位置。首先需要在类视图选择需要查看实例的类。

此外,还能对两个堆转储文件进行比较。通过比较我们能够分析出两个时间点哪些对象被大量创建或销毁。

线程转储和堆转储均可以另存成文件,以便进行离线分析。

达内昆明java培训认为作为一些程序员学会利用一些软件和程序来分析我们所写的程序是必要的,我们应该做到我们的程序是经得起检验的。

上一篇:昆明java培训:告诉你Java程序员未来在哪?
下一篇:看完这个你会对Java有兴趣吗?

恭喜JAVA学员张*云入职昆明安舍科技有限公司

笔试与面试你擅长哪一个

这样的区别你知道嘛?

Java适合用来创建内部领域特定语言吗?

选择城市和中心
贵州省

广西省

海南省