前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Java 性能分析 5 大工具

Java 性能分析 5 大工具

作者头像
FunTester
发布于 2025-01-23 08:08:17
发布于 2025-01-23 08:08:17
1710
举报
文章被收录于专栏:FunTesterFunTester

上一篇文章我们分享了 Java 性能分析 的理论知识,相信一定有人跃跃欲试了,下面轮到了实践环节,本文将会重点介绍 5 大分析利器,让各位在进行Java 性能分析的时候如虎添翼,更上层楼。

JProfiler

JProfiler 特点

JProfiler 是一款功能强大的 Java 性能分析和调优工具,它为开发人员和性能工程师提供了深入分析 Java 应用程序的各项性能指标的能力。JProfiler 可以帮助你定位和解决性能瓶颈,优化应用程序的内存使用、线程管理和执行效率。

  • 多任务:无论是 CPU 分析、内存分析还是线程分析,JProfiler 都一应俱全。它为您提供了一个全面的应用程序性能视图,使您能够从多个角度了解应用程序的运行情况,精准定位性能瓶颈。
  • 堆转储和火焰图:JProfiler 可以捕获堆转储,即应用程序内存的快照,并进行深入分析。此外,JProfiler 提供的火焰图以视觉化的方式展示调用栈和执行路径,帮助使用者快速定位性能问题,像是一位导航员,指引清晰的前行道路。
  • 实时对象分配跟踪:想要实时监控应用程序中对象的创建情况吗?JProfiler 让这一切变得可能。它跟踪对象的实时分配,帮助开发者识别那些可能导致性能下降的过度对象创建领域,确保应用在运行过程中高效稳定。
  • IDE 集成:JProfiler 与流行的 IDE 如 IntelliJ IDEAEclipse 无缝集成,能够直接在开发环境中进行性能分析,大大节省了时间和精力。

JProfiler 不仅是一个强大的性能分析工具,更是优化 Java 应用程序的得力助手。

为什么 JProfiler

JProfiler 不仅仅是另一个架子上的分析工具。以下是它脱颖而出的几个关键原因:

  • 功能丰富:JProfiler 提供了一整套强大的能力,适合深入剖析即使是最复杂的 Java 应用程序的性能。它的功能不仅丰富多样,还能够满足各种性能分析的需求,无论是简单的 CPU 使用情况还是复杂的内存泄漏问题。
  • 数据展示:JProfiler 不仅仅是把数据呈现给您。它通过全面的可视化工具,如火焰图,轻松理解应用程序的执行过程。火焰图以直观的方式展示调用栈和执行路径,让复杂的数据变得一目了然。
  • 初学者友好:不要被 JProfiler 的强大功能吓倒!它设计了一个用户友好的界面,使得即使是初学者也能迅速上手。无论您是性能分析的新手还是经验丰富的专家,JProfiler 都能为你提供清晰的操作体验。
  • 简化的工作流程:告别频繁的上下文切换!JProfiler 与主要的 IDE 如 IntelliJ IDEA 和 Eclipse 无缝集成,允许开发者直接在开发环境中进行性能分析。这样可以保持工作流程的流畅,无需离开开发环境即可完成深入的性能检查。

JProfiler 的这些特性使它成为一个不仅功能强大,而且使用便捷的性能分析工具,让您能够高效地优化 Java 应用程序,提升应用性能和用户体验。

YourKit

YourKit 特点

YourKit 是一款强大的 Java 性能分析和调试工具,专为 Java 开发人员、性能工程师和运维工程师设计。它通过提供详细的 CPU、内存、线程和垃圾收集(GC)分析,帮助用户识别和解决应用程序中的性能问题。

Java 开发人员可以使用 YourKit 优化代码执行效率,定位内存泄漏以及不必要的内存分配。性能工程师可以借助 YourKit 进行全面的性能调优,分析应用程序在高负载下的表现,并优化系统资源的使用。运维工程师(DevOps)可以通过 YourKit 监控生产环境中的 Java 应用程序,检测和解决潜在的性能问题,确保系统的稳定性和高效运行。

YourKit拥有以下出色的能力:

  • 分析能力强大:无论是 CPU 分析、内存分析还是线程分析,YourKit 都能满足你的需求。它超越了基本功能,提供深入的的分析能力,帮助精确识别即使是最微妙的性能问题,从而实现全面优化。
  • 对象分配管理:YourKit 不仅仅告诉用户存在内存泄漏,还能帮助找到罪魁祸首!它提供了详细的对象分配分析,能够准确识别哪些对象被创建而可能从未释放,确保内存管理无懈可击。
  • 异步分析:异步编程虽然极具优势,但其分析往往复杂且具有挑战性。YourKit 的异步分析功能使这一过程变得简单易行,提供关于异步操作性能的深刻见解,帮助用户优化并发处理的效率。
  • 远程分析:在处理分布式系统时,分析可能会变得更加复杂。YourKit 的远程分析支持能够在网络中不同机器上分析应用程序,特别适合优化复杂的部署环境,实现全局视角的性能优化。

YourKit 的这些特性使其成为一个非常强大的工具,能够在细节层面提供深刻的性能洞察。无论您是面对复杂的应用程序,还是需要在分布式系统中优化性能,YourKit 都能为您提供无与伦比的支持和帮助。

为什么选择 YourKit

以下是 YourKit 从人群中脱颖而出的原因:

  • 分析武器库:YourKit 绝对不是给胆小者的。它拥有一整套强大的功能,专为那些需要从应用程序中挤出每一滴效率的经验丰富的开发人员和性能专家设计。无论是深度的 CPU 分析、详细的内存分析,还是复杂的线程分析,YourKit 都能提供精确且全面的洞察。
  • 低开销分析:分析过程中,性能影响往往是一个不可忽视的问题。YourKit 通过其高效的低开销分析功能,将这种影响降到最低,确保使用者可以在不显著减慢应用程序的情况下获得准确的性能数据。这意味着我们能够在实际运行环境中获得真实的性能反馈,而不必担心分析工具本身会引入额外的性能负担。
  • 远程支持:如果你需要在不同机器上分析应用程序,YourKit 的远程分析功能使这一过程变得轻松自如。它节省了处理分布式系统时所需的时间和精力,能够高效地优化复杂的部署环境。

VisualVM

VisualVM 是一款开源的 Java 性能监控和分析工具,专为开发人员和运维工程师设计。它集成了多种 JDK 工具功能,如 jconsolejstatjstackjmap,使用户能够在一个统一的界面中监控、分析和调试 Java 应用程序。

VisualVM 提供实时监控 CPU 和内存使用情况的能力,帮助开发人员优化代码性能。通过线程分析和堆转储功能,开发人员可以识别死锁、线程争用和内存泄漏等问题。性能工程师可以使用 VisualVM 进行详细的内存分析,查看对象的分配和引用关系,优化垃圾收集策略。运维工程师则可以通过 VisualVM 监控生产环境中的应用程序,捕获和分析性能数据,及时发现和解决潜在的性能问题。VisualVM 是一个功能强大、用户友好的工具,适合各种规模的 Java 应用程序性能优化和调试需求。

VisualVM 的特点包括:

  • 集成多种工具:将 jconsolejstatjstackjmap 等 JDK 工具功能集成在一个统一的界面中,方便用户进行各种性能分析和调试任务。
  • 实时监控:能够实时监控 Java 应用程序的 CPU 和内存使用情况,包括线程活动、堆内存状态、垃圾收集行为等,帮助快速定位性能问题。
  • 内存分析:提供详细的内存使用分析功能,包括堆转储、对象分配跟踪和内存泄漏检测,有助于优化内存管理和防止内存泄漏。
  • 线程分析:支持对应用程序中的线程进行分析,帮助识别死锁、线程争用以及高 CPU 占用等问题。
  • 轻量级和易用性:作为开源工具,VisualVM 易于安装和使用,不需要额外的配置,同时对系统资源消耗较低,适合日常的开发和运维任务。
  • 插件扩展:支持通过插件扩展功能,用户可以根据需求添加额外的性能分析工具和功能,定制化使用体验。
  • 跨平台支持:作为一款基于 Java 的工具,VisualVM 可以在各种操作系统上运行,包括 WindowsLinux 和 macOS。

对于想要轻松入门 Java 性能分析的开发者来说,VisualVM 是一个值得信赖的伙伴。

为什么 VisualVM

以下是使 VisualVM 成为初学者绝佳选择的原因:

VisualVM 适合初学者的原因包括:

  1. 直观的用户界面:VisualVM 提供了易于理解和操作的图形用户界面,使初学者可以轻松导航和使用各种性能监控和分析功能,而无需深入了解底层工具和命令行操作。
  2. 集成多种工具:将 jconsolejstatjstackjmap 等功能整合在一个应用程序中,初学者不需要单独安装和配置多个工具,可以在一个界面中完成大部分性能分析任务。
  3. 实时监控:提供实时的数据视图,能够快速查看应用程序的 CPU 和内存使用情况、线程活动等,有助于初学者即时了解应用程序的运行状态。
  4. 内置示例和文档:附带有详细的帮助文档和示例,初学者可以参考这些资源来学习如何使用各种功能,理解如何进行性能分析和调优。
  5. 图形化报告:提供图形化的性能报告和数据可视化,使得复杂的数据变得直观易懂,帮助初学者更好地理解和分析性能指标。
  6. 免费和开源:VisualVM 是开源且免费的,降低了初学者的使用门槛,不需要额外的费用即可获得强大的性能分析工具。
  7. 简单安装和配置:安装和配置过程相对简单,初学者可以轻松上手,无需复杂的设置或配置步骤。

这些特点使 VisualVM 成为初学者学习 Java 性能分析和调优的理想工具,帮助他们快速掌握基本的性能监控技能。

JMC(Java Mission Control)

JMC简介

Java Mission Control (JMC) 是 Oracle 提供的一款高级 Java 性能分析工具,专为开发人员和运维工程师设计。它通过集成的性能监控和分析功能,帮助用户深入了解 Java 应用程序的运行状况,优化性能并解决潜在问题。

Java Mission Control (JMC) 的主要优点包括:

  1. 深入性能分析:提供详细的 CPU 使用率、内存消耗、线程活动等性能数据,帮助用户深入理解应用程序的行为和瓶颈。
  2. 低开销数据采集:采用低开销的数据采集方法,减少对应用程序性能的干扰,适合在生产环境中使用。
  3. 集成 JDK Flight Recorder:与 JDK Flight Recorder (JFR) 集成,支持记录和分析 JVM 运行事件,如垃圾回收、类加载和线程活动等,提供全面的性能数据支持。
  4. 实时和历史数据分析:支持实时监控和历史数据分析,帮助用户即时解决当前问题并回顾过去的性能趋势。
  5. 用户友好界面:直观的用户界面和图形化的数据展示,简化了复杂的性能分析过程,使分析结果更加易于理解。
  6. 精准的内存分析:提供内存泄漏检测和对象分配分析功能,帮助优化内存管理,提升应用程序的内存效率。
  7. 开源与免费:作为开源工具,JMC 免费提供给所有 Java 用户,降低了使用门槛。

JMC 是一款功能强大且高效的性能分析工具,适合各种规模的 Java 应用程序,帮助开发人员和运维工程师提高应用程序的性能和稳定性。

为什么 JMC

JMC(Java Mission Control) 不仅继承了 VisualVM 的基础功能,还通过增强的性能分析能力为开发者提供了更多优势,使其成为处理复杂应用程序时的首选工具。Java Mission Control (JMC) 的主要功能包括:

Java Mission Control (JMC) 的特点包括:

  1. 集成 JDK Flight Recorder:与 JDK Flight Recorder (JFR) 无缝集成,能够捕获和分析详细的 JVM 运行事件,提供深入的性能和行为数据。
  2. 低开销数据采集:采用低开销的数据采集方法,减少对应用程序性能的干扰,适合在生产环境中使用。
  3. 实时性能监控:实时跟踪 CPU 使用率、内存消耗、线程活动等性能指标,帮助快速识别和解决性能问题。
  4. 内存分析功能:提供详细的内存分析,包括堆内存和对象分配分析,支持检测内存泄漏和优化内存管理。
  5. 用户友好的界面:直观的用户界面和图形化的数据展示,使复杂的性能数据易于理解和分析。
  6. 历史数据分析:支持对过去的性能数据进行回顾和分析,帮助识别长期存在的性能问题。

JMC 是一款为深入 Java 性能分析量身定制的工具,它不仅能满足基本需求,还为那些需要在生产环境中进行深入分析和监控的开发人员提供了额外的支持。

Arthas

Arthas 是一个开源的 Java 诊断工具,由 Alibaba 开发,专为实时性能监控、调试和故障排查设计。它允许开发人员和运维工程师在生产环境中动态诊断和解决问题,无需重启应用程序。

Arthas 的核心功能包括动态调试和实时性能监控。通过其命令行界面,用户可以实时查看方法调用链、检查线程状态和堆栈信息,分析方法执行耗时,并进行热修复。它支持生成和分析堆转储文件,帮助发现内存泄漏和优化内存管理,同时也提供了对线程状态和死锁的分析工具。

之前的文章和视频我重点介绍了 arthas 有兴趣的可以翻翻过去考考古,我个人非常推荐大家学习这个工具。

Arthas 的卓越特性

  • 分析实时热点: 无需复杂设置或重新启动应用程序。Arthas 能够直接附加到运行中的 Java 进程中,允许我们在不影响应用运行的情况下进行实时分析。这使得它在生产环境中尤为宝贵。
  • 动态类重新加载: 对于开发人员来说,重新部署应用程序可能是耗时的,但 Arthas 解决了这个问题。它支持动态重新加载修改后的类,能够在不重新启动整个应用程序的情况下快速修复问题,并立刻观察其效果。
  • 内存泄漏猎人: 内存泄漏是许多应用程序的隐形杀手,尤其是在生产环境中。Arthas 提供了强大的内存泄漏检测功能,力争在问题显现之前将其扼杀在摇篮中,确保应用程序的稳定性。
  • 线程转储解码器: 线程转储通常很复杂,难以解读,但 Arthas 让这一过程变得简单。它提供了对线程转储的深度分析,能够轻松理解线程的行为,及时发现并解决潜在的线程争用问题。
  • 方法性能记录器(Mpred): Arthas 内置的 Mpred 功能允许您记录和分析特定方法的执行时间。这为您提供了对应用程序性能的细粒度见解,帮助您精确定位并优化关键代码路径。

Arthas 是那些追求高效、灵活、且不希望在生产环境中中断服务的团队的绝佳选择。它强大的实时分析能力和对敏捷开发流程的支持,使其成为 Java 应用性能优化的必备工具。

为什么 Arthas

  • 轻量级且高效: Arthas 操作简便,对应用程序的性能影响极小。它是进行快速分析任务的理想工具,能够在不影响生产环境的情况下提供所需的洞察。
  • 实时洞察: 过去等待应用程序重新启动来分析性能的日子一去不复返了。Arthas 提供实时分析数据,让您能够在问题出现时即时识别并解决它们。
  • 开源优势: Arthas 是开源的,并且采用 Apache 2.0 许可证。这意味着它对开发者和团队来说不仅是免费的,还非常易于获取和使用,适合各种规模的项目。

Arthas 的这些特性使其成为开发者们青睐的工具,尤其是在生产环境中需要快速、有效的性能分析时,它的高效和实用性显得尤为突出。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java Profilers探查器使用指南-Java快速入门教程
有时仅仅编写运行的代码是不够的。我们可能想知道内部发生了什么,例如内存是如何分配的,使用一种编码方法而不是另一种编码方法的后果,并发执行的影响,提高性能的领域等。我们可以为此使用探查器。
jack.yang
2025/04/05
1060
Java Profilers探查器使用指南-Java快速入门教程
Java 性能分析
在企业开发中,Java 依然占据着举足轻重的地位,但即使是最坚固的应用程序也可能面临性能下降的问题。在当今快节奏的数字世界里,识别并解决这些瓶颈变得尤为重要。这时,Java 分析器便成为您的秘密武器,帮助解决这些性能挑战。
FunTester
2025/01/23
650
Java 性能分析
Java一分钟之-Java性能分析与调优:JProfiler, VisualVM等工具
在Java开发中,性能优化是提升应用效率的关键步骤。本文将介绍两款常用的Java性能分析工具——JProfiler和VisualVM,以及它们如何帮助我们识别并解决性能问题。
Jimaks
2024/05/28
5850
Java一分钟之-Java性能分析与调优:JProfiler, VisualVM等工具
Java性能优化工具和技术
介绍 Java是当今软件开发世界中使用最广泛的编程语言之一。 Java应用程序在许多垂直领域(银行,电信,医疗保健等)中使用,在某些情况下,每个垂直方向都会提供一组特定的设计优化。许多与性能相关的最佳实践在各种应用中都是常见的。本指南目的是帮助开发人员通过关注JVM内部组件,性能调优原则和最佳实践以及如何利用可用的监控和故障排除工具,尽可能多地提供业务环境中的应用程序性能。 可以以不同的方式定义“最佳性能”,但基本要素是:Java程序在业务响应时间要求内执行计算任务的能力,以及应用程序实现其业务功能的
用户1263954
2018/01/30
2K0
Java性能优化工具和技术
使用 VisualVM 进行性能分析及调优
开发大型 Java 应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃。为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化。
Java架构师历程
2018/09/26
2.5K0
使用 VisualVM 进行性能分析及调优
高性能代码如何编写?
在Java中,Arrays.sort() 方法使用了一种改进的快速排序算法,通常情况下具有很好的性能。
终有链响
2024/07/29
1120
高性能代码如何编写?
Java进行内存泄露​ GC 分析都有哪些常用好用的工具
使用Java语言开发应用程序,虽然JVM帮我们进行了GC收集、清除工作;但是使用不当的话,还是会导致某些对象常驻堆空间无法给垃圾收集器清除,导致内存泄露、内存溢出等情况,今天盘点一下在项目中进行内存泄露分析和GC分析的一些常用、好用的工具。
BUG弄潮儿
2021/01/05
1.3K0
JVM-12虚拟机性能监控与故障处理工具之【JDK的可视化工具-VisualVM】
Visual VM (All-in-One Java Troubleshooting Tool)是目前为止随JDK发布的功能最强大的运行监视和故障处理程序。 Visual VM除了提供运行监视、故障处理外,还提供了比如性能分析(Profiling),对应用程序的实际性能影响很小,使得它可以直接应用在生产环境,这个优点是JProfiler、YourKit等第三方的性能分析工具无法比拟的.
小小工匠
2021/08/17
5080
JVM-监控及诊断工具
ps(Java Process Status):显示指定系统内所有的HotSpot虚拟机进程(查看虚拟机进程信息),可用于查询正在运行的虚拟机进程。
才疏学浅的木子
2023/10/17
5370
JVM-监控及诊断工具
Java服务端问题排查
在构建和维护Java服务端应用程序时,经常会面临各种问题,如内存溢出(OOM)、高CPU利用率、高负载以及类冲突。这些问题可能导致应用程序崩溃或性能下降,因此及时的问题排查和解决至关重要。本篇博客将深入探讨这些问题的排查方法,并提供代码示例以帮助您更好地理解和处理这些常见的Java服务端问题。
疯狂的KK
2023/09/27
2800
Java服务端问题排查
JVM性能监控工具推荐
随着现代应用程序的复杂性不断增加,Java应用程序的性能监控和分析变得尤为重要。JVM性能监控工具是我们的得力助手,它们可以帮助我们追踪内存使用、线程情况、垃圾回收等关键指标,从而更好地了解应用程序的健康状况。本文将介绍一些常用的JVM性能监控工具,并详细展示它们的用法,以便帮助你更好地监控和优化Java应用程序。
疯狂的KK
2023/09/25
1.3K0
JVM性能监控工具推荐
Java性能分析中常用命令和工具
当涉及到 Java 性能分析时,有一系列强大的命令和工具可以帮助开发人员分析应用程序的性能瓶颈、内存使用情况和线程问题。以下是一些常用的 Java 性能分析命令和工具,以及它们的详细说明和示例。
xcbeyond
2023/09/06
4350
Java性能分析中常用命令和工具
Java编程的精髓:深入理解JVM和性能优化
Java是一种广泛使用的高级编程语言,其强大的跨平台性和丰富的生态系统使其成为企业应用程序和大规模系统的首选。然而,要真正掌握Java编程,理解Java虚拟机(JVM)和性能优化是至关重要的。本文将深入研究Java编程的精髓,重点关注JVM的工作原理和如何优化Java应用程序的性能。
IT_陈寒
2023/12/13
2060
Java编程的精髓:深入理解JVM和性能优化
Java虚拟机(六):JVM调优工具
工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗费性能的分析(dump文件分析)一般也不会在生产直接分析,往往dump下来的文件达1G左右,人工分析效率较低,因此利用工具来分析jvm相关问题,长长可以到达事半功倍的效果来。
朝雨忆轻尘
2019/06/19
7000
Java虚拟机(六):JVM调优工具
利用Java自带工具分析程序性能
在进行 Java 程序性能分析时,我们可以利用 Java 自带的工具来对程序进行监控和调试。这些工具包括 JVM 监控工具、GC 日志分析工具以及 Java 编译器等,它们可以帮助我们识别出程序中存在的性能问题并提出相应的解决方案,从而提升程序的性能和响应速度。下面将详细介绍常用的 Java 性能分析工具及其使用方法,并结合实例进行演示。
用户1289394
2024/02/26
2600
利用Java自带工具分析程序性能
JVM调优几款好用的内存分析工具
对于高并发访问量的电商、物联网、金融、社交等系统来说,JVM内存优化是非常有必要的,可以提高系统的吞吐量和性能。通常调优的首选方式是减少FGC次数或者FGC时间,以避免系统过多地暂停。FGC达到理想值后,比如一天或者两天触发一次FGC。FCT时间优化为100~300毫秒后,再减少YoungGC次数或者YoungGC时间,YoungGC仍然会消耗CPU资源,优化YoungGC调用次数和消耗的CPU资源,可以提高系统的吞吐量。
程序员大彬
2023/03/01
1.3K0
JVM调优几款好用的内存分析工具
分享几款超好用的JVM调优工具,建议收藏!
在之前的文章中,我们介绍了 JVM 常用的命令使用,通过这些命令可以快速的查询线上服务的性能情况和排查相关的问题。
Java极客技术
2024/04/25
3.5K0
分享几款超好用的JVM调优工具,建议收藏!
JProfiler 13 for Mac(Java开发分析工具)
JProfiler是一款专业的Java应用程序性能分析工具,可帮助开发人员识别和解决Java应用程序中的性能问题。JProfiler支持Java SE、Java EE和Android平台,提供了多种分析选项,包括CPU分析、内存分析和线程分析等。
用户10121095
2023/04/04
3970
使用 VisualVM 和 JProfiler 进行性能分析及调优
在我们开发大型 Java 应用程序的过程中,难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃。为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化。在本文中,我们主要介绍 VisualVM 和 JProfiler 这两款性能分析工具。
CG国斌
2020/06/22
3.5K0
使用 VisualVM 和 JProfiler 进行性能分析及调优
架构面试题汇总:JVM全套(四)
在内存模型方面,需要了解Java堆、Java栈、方法区以及本地方法栈等各个部分的作用和特点。特别是Java堆和方法区,它们是JVM管理的两块主要内存区域,分别用于存储对象实例和类的元数据信息。
公众号:码到三十五
2024/03/19
1730
相关推荐
Java Profilers探查器使用指南-Java快速入门教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档