当前位置: 首页 > news >正文

锦州建设工程信息网站优化网站哪个好

锦州建设工程信息网站,优化网站哪个好,婚纱网站页面设计,ppt可以做网站吗Introspector作用及影响在分析IntrospectorCleanupListener之前,先了解一下Introspector。Introspector是JDK中java.beans包下的类,它为目标JavaBean提供了一种了解原类方法、属性和事件的标准方法。通俗的说,就是可以通过Introspector构建一…

Introspector作用及影响

在分析IntrospectorCleanupListener之前,先了解一下Introspector。Introspector是JDK中java.beans包下的类,它为目标JavaBean提供了一种了解原类方法、属性和事件的标准方法。通俗的说,就是可以通过Introspector构建一个BeanInfo对象,而这个BeanInfo对象中包含了目标类中的属性、方法和事件的描述信息,然后可以使用这个BeanInfo对象对目标对象进行相关操作。

下面看一个简单的示例会很容易明白。为了简单,Student类中只有一个name属性。




结果输出:Student{name='张三'}
复制代码

通过查看Introspector.getBeanInfo方法的源码会发现,Introspector在构建一个BeanInfo对象的时候,会将构建的BeanInfo对象和原类缓存到一个Map中,源码如下。


通过上的代码可以得出,Introspector间接持有了BeanInfo的强引用。如果使用Introspector操作了很多类,那么Introspector将间接持有这些BeanInfo的强引用。在发生垃圾收集的时候,检测到这些BeanInfo存在引用链,则这些类和对应的类加载器将不会被垃圾收集器回收,进而导致内存泄漏。所以,为了解决这个问题,在使用Introspector操作完成后,调用Introspector类的flushCaches方法清除缓存。


通过上面的代码会发现,清除的时候是清空了整个缓存,因为没有很好的办法来确定每个缓存是属于哪个应用的,所以清除的时候会清除所有应用的缓存。

IntrospectorCleanupListener解析

上面分析了Introspector的作用和影响,那IntrospectorCleanupListener和Introspector有什么关系呢?
IntrospectorCleanupListener是spring-web jar中的类,源码如下。


IntrospectorCleanupListener实现了ServletContextListener接口,也就是说,在web容器初始化(准确的说是在filters或servlets初始化之前)的时候会执行contextInitialized方法,在ServletContext销毁(准确的说是在filters和servlets销毁之后)的时候会执行contextDestroyed方法。从图中contextDestroyed方法,可以看到在销毁ServletContext的时候调用了Introspector.flushCaches方法,清空了对应缓存。IntrospectorCleanupListener中为什么要这么做?难道是Spring使用Introspector操作后没有清空对应缓存?查看IntrospectorCleanupListener类的源码,会发现有这样一段标注。


大意是说,在使用Spring本身的时候并不需要使用此监听器,因为Spring自己的内部机制会立即清空对应的缓存。虽然,Spring本身不存在这样的问题,但是如果和其它框架结合使用,而其它框架有这个问题,如Struts、Quartz等,那就需要配置这个监听器,在销毁ServletContext的时候清空对应缓存。

有一点需要注意的是,像这样一个简单的Introspector内存泄漏将会导致整个应用的类加载器不会被垃圾收集器回收,如果有内存泄漏的问题,可以考虑此因素。

配置IntrospectorCleanupListener

在以往的工作经历中,多次看到在web.xml中将IntrospectorCleanupListener配置成非第一个listener。


其实,看过源码的都知道,官方的表述是必须将此监听器配置成web.xml中的第一个listener,才能在合适的时间发挥最有效的作用。

原因其实很简单,在Servlet3.0规范之前,监听器的调用是随机的,而从Servlet3.0开始,监听器的调用顺序是根据其在web.xml中配置的顺序,并且实现ServletContextListener的监听器,contextInitialized方法调用顺序是按照在web.xml中配置的顺序正序依次执行,而contextDestroyed方法的调用顺序是按照在web.xml中配置的顺序逆序依次执行。所以,如果IntrospectorCleanupListener被配置成了第一个listener,那么它的contextDestroyed方法将最后一个执行,将发挥最有效的清除作用;而如果不是,那么可能会残留未被清除的缓存。


http://www.lbrq.cn/news/2408329.html

相关文章:

  • 石家庄造价信息网杭州seo运营
  • 什么静态网站容易做怎样创建网站或者网址
  • 网上商城电商项目的管理步骤网站推广seo是什么
  • 虎门外贸网站建设公司pc优化工具
  • 网站开发如何建设公共页面百度 搜索热度
  • 建行官方网站多少钱怎样自己做网站
  • 扬中人电脑系统优化工具
  • 网站一直没有收录关键词优化哪个好
  • 成都搭建网站seo快速推广窍门大公开
  • 网站后台更新 前台为啥没反应竞价托管咨询微竞价
  • 网站设计提成多少钱四种基本营销模式
  • 深圳企业网站建设哪家好商旅100网页版
  • 一个域名可以做几个网站网站如何推广营销
  • 怎样在线做网站404百度的营销策略
  • 寻找网站建设 网站外包长尾关键词什么意思
  • 互联网品牌有哪些seo技术外包
  • 做网站公司职员工资2022拉新推广平台
  • 做网站电话沧州关键词优化排名用什么软件比较好
  • python做网站教程百度网站推广排名优化
  • 平安区wap网站建设公司微信卖货小程序怎么做
  • 做什么推广最赚钱seo研究中心论坛
  • 东风多利卡道路清障车做网站国外十大免费服务器和域名
  • 网站建设报价石家庄头条今日头条新闻
  • 国外做机械设计任务的网站网上推广赚钱项目
  • 北京 网站设计互联网运营培训课程
  • 免费搭建个人网站的3种实用方法做网站好的网站建设公司
  • 如何用七牛云做视频网站怎么做市场推广
  • 单位网站建设存在问题情况汇报如何搜索关键词
  • 常平哪里有招计算机网站开发的网站首页制作网站
  • 山东省城乡建设厅网站互联网运营推广公司
  • 玄机——第六章 流量特征分析-蚂蚁爱上树
  • MybatisPlus-14.扩展功能-DB静态工具-练习
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘lxml’问题
  • 图片放大镜案例
  • 深入排查:编译环境(JDK)与运行环境(JRE/JDK)不一致时的常见 Java 错误及解决方案
  • web.m3u8流媒体视频处理