代号十三
文章12
标签5
分类3
JVM 内存分析工具 MAT 的深度讲解与实践——进阶篇(转载)

JVM 内存分析工具 MAT 的深度讲解与实践——进阶篇(转载)

原文作者:https://juejin.cn/user/1275089220539869
原文作者公众号: Q的博客。
原文链接:https://juejin.cn/post/6911624328472133646

本系列共三篇文章, 本文是系列第2篇——进阶篇,详细讲解 MAT 各种工具的核心功能、用法、适用场景,并在具体实战场景下讲解帮大家学习如何针对各类内存问题。

  • JVM 内存分析工具 MAT 的深度讲解与实践——入门篇》 介绍 MAT 产品功能、基础概念、与其他工具对比、Quick Start 指南。
  • 《JVM 内存分析工具 MAT 的深度讲解与实践——进阶篇》 展开并详细讲解 MAT 各种工具的核心功能、用法、场景,并在具体实战场景下讲解帮大家加深体会。
  • 《JVM 内存分析工具 MAT 的深度讲解与实践——高阶篇》 总结复杂内存问题的系统性分析方法,并通过一个综合案例提升大家的实战能力。
JVM 内存分析工具 MAT 的深度讲解与实践——入门篇(转载)

JVM 内存分析工具 MAT 的深度讲解与实践——入门篇(转载)

原文作者:https://juejin.cn/user/1275089220539869
原文作者公众号: Q的博客。
原文链接:https://juejin.cn/post/6911624328472133646

JVM 内存分析往往由团队较资深的同学来做,本系列通过3篇文章,深度解析并帮助读者全面深度掌握 MAT 的使用方法。即使没有 JVM 内存分析的实践经验,也能快速成为内存分析高手!

本系列共三篇文章如下, 本文是第一篇入门篇:

  • 《JVM 内存分析工具 MAT 的深度讲解与实践——入门篇》 介绍 MAT 产品功能、基础概念、与其他工具对比、Quick Start 指南。
  • 《JVM 内存分析工具 MAT 的深度讲解与实践——进阶篇》 展开并详细介绍 MAT 的核心功能,并在具体实战场景下讲解帮大家加深体会。
  • 《JVM 内存分析工具 MAT 的深度讲解与实践——高阶篇》 总结复杂内存问题的系统性分析方法,并通过一个综合案例提升大家的实战能力。
Spring-framework源码分析(八)getBean单例循环依赖解决思路

Spring-framework源码分析(八)getBean单例循环依赖解决思路

  • 循环依赖如何发生?
  • spring如何解决循环依赖
Spring-framework源码分析(七)bean的生命周期

Spring-framework源码分析(七)bean的生命周期

实例化
填充属性
初始化
销毁

Spring-framework源码分析(六)refresh方法

Spring-framework源码分析(六)refresh方法

refresh方法是Spring容器最核心的方法

  • 概括了Spring初始化bean的整个生命周期
  • 生命周期的回调
  • AOP
  • Spring解决循环依赖的三级缓存
Spring-framework源码分析(五)IOC容器初始化

Spring-framework源码分析(五)IOC容器初始化

Spring IOC 容器 在初始化时主要做以下三件事:

  • BeanDefinition 的Resource定位
  • BeanDefinition 的载入和解析
  • BeanDefinition 在容器中的注册
Spring-framework源码分析(四)BeanDefinition

Spring-framework源码分析(四)BeanDefinition

BeanDefinition 是 Spring-framework 的基石

Spring-framework源码分析(三)统一资源加载

Spring-framework源码分析(三)统一资源加载

关于统一资源和资源加载策略

官网对于 org.springframework.core.io.Resource 的一段说明: https://docs.spring.io/spring-framework/docs/5.2.7.RELEASE/spring-framework-reference/core.html#resources-introduction

Java’s standard java.net.URL class and standard handlers for various URL prefixes, unfortunately, are not quite adequate enough for all access to low-level resources. For example, there is no standardized URL implementation that may be used to access a resource that needs to be obtained from the classpath or relative to a ServletContext. While it is possible to register new handlers for specialized URL prefixes (similar to existing handlers for prefixes such as http:), this is generally quite complicated, and the URL interface still lacks some desirable functionality, such as a method to check for the existence of the resource being pointed to.

  Spring’s Resource interface is meant to be a more capable interface for abstracting access to low-level resources.

  在 Java 中,将不同来源的资源抽象成 java.net.URL ,即统一资源定位器(Uniform Resource Locator),然后通过注册不同的 handler ( URLStreamHandler )来处理不同来源的资源的读取逻辑,一般 handler 的类型使用不同前缀(协议, Protocol )来识别,如“file:”“http:” “jar:”等,然而 URL 没有默认定义相对 Classpath 或 ServletContext 等资源的 handler ,虽然可以注册自己的 URLStreamHandler 来解析特定的 URL 前缀(协议), 比如“classpath:”,然而这需要了解 Url 的实现机制,实现也比较复杂,而且 Url 也没有提供一些基本的方法,如检查当前资源是否存在、检查当前资源是否可读等方法。 因而 Spring 对其内部使用到的资源实现了自己的抽象结构 : Resource 接口封装底层资源,(《Spring源码深度解析 第二版》,略微修改)然后通过 ResourceLoader 接口来实现 Resource 的加载策略,也即是提供了统一的资源定义和资源加载策略的抽象。通过不同策略进行的所有资源加载,都可以返回统一的抽象给客户端,客户端对资源可以进行的操作,则由 Resource 接口进行界定,具体如何处理,则交由不同来源的资源实现类来实现。

  • Resource :提供统一的资源定义抽象,界定了对资源可以进行的处理操作。例如:文件资源( FileSystemResource ) 、 Classpath 资源( ClassPathResource )、 URL 资源( UrlResource )、 InputStream 资源( InputStreamResource ) 、Byte 数组( ByteArrayResource )等 。
  • ResourceLoader :提供统一的资源加载策略抽象,返回统一的 Resource 资源抽象给客户端。
Spring-framework源码分析(二)架构总览与说明

Spring-framework源码分析(二)架构总览与说明

Spring-Framework整体架构

Spring-framework源码分析(一)调试环境搭建

Spring-framework源码分析(一)调试环境搭建

本文主要内容: 搭建spring-framework 编译调试环境源码

×