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

阿里云账号密码发给网站开发wordpress恶意 文章

阿里云账号密码发给网站开发,wordpress恶意 文章,天猫网站怎么做,网站开发有什么用概述 自从开始接触 Spring 之后#xff0c;一直以来都在思考一个问题#xff0c;在 Spring 应用的运行过程中#xff0c;为什么这些 bean 不会被回收#xff1f; 今天深入探究了这个问题之后#xff0c;才有了答案。 思考点 大家都知道#xff0c;一个 bean 会不会被回…概述 自从开始接触 Spring 之后一直以来都在思考一个问题在 Spring 应用的运行过程中为什么这些 bean 不会被回收 今天深入探究了这个问题之后才有了答案。 思考点 大家都知道一个 bean 会不会被回收取决于对象存活判定算法。在 JVM 底层中使用的是可达性分析算法抛开 HotSpot 的实现细节不谈那么一个对象被判定为死亡应该与 GC Root 不存在可达的引用路径。 所以Spring 的 bean 肯定是与 GC Root 存在可达的引用路径才不会被回收掉在 Java 语言对于 GC Root 的定义中以下几种对象可以作为 GC Root 虚拟机栈的栈帧中的本地变量表中引用类型对象所指向的堆中的对象处于运行中状态RUNNABLEBLOCKEDWAITINGTIMED_WAITING的线程对象JDK 自带的类加载器对象本地方法所引用的对象JVM 持有的对象例如基本类型的 Class 对象NullPointerException 等常用异常对象被 synchronized 关键字修饰的对象 一般来说只要是符合上面这几种规则的对象或者能由上面的规则推导出存在引用的对象都可以作为 GC Root。 那么 Spring 的 bean 的 GC Root 是哪一种呢或者说找到了 Spring 的 bean 的 GC Root就找到了问题的答案。 动手寻找答案 首先新建一个 SpringBoot 应用里面定义了两个 bean 以及一个启动类包结构如下 然后点击运行启动类启动完成之后打开 jvisualVM 找到对应的应用然后点击生成当前堆 dump 然后打开后选择类输入 Hello 过滤类名找到 HelloWorldService点击在实例视图中显示发现只有一个实例存在这符合我们的预期。 最后右键点击这个实例选择显示最近的垃圾回收根节点可以观察到如下的引用路径 可以看到DefaultListableBeanFactory 和 AnnotationConfigServletWebServerApplicationContext 都是我们比较熟悉的 bean 容器对应的往下找发现有 ConcurrentHashMap$Node 引用。我们都知道在 Spring 中正是这两个容器准确地说是 DefaultListableBeanFactory中使用 ConcurrentHashMap 存放了实例化好的 bean。 这都是非常符合我们预期的。 但是在 AbstractApplicationContext 再往上找后发现有个叫 ApplicationShutdownHooks 的东西。意思就是说我们的容器最终与这个 ApplicationShutdownHooks 的东西扯上了引用关系。接着我们翻阅 Spring 源码进行求证 发现在 AbstractApplicationContext 的 registerShutdownHook 方法中调用了这一行代码而 registerShutdownHook 方法正是在 Spring 容器初始化时要调用的方法 这说明在 Spring 容器初始化时调用的这个方法然后在继续往里跟踪这个方法 最后我们可以发现AbstractApplicationContext 中的 Thread shutdownHook 变量最终被放在了 ApplicationShutdownHooks 的这个 map 里面而这个 map 恰好就是一个静态变量。 结论 所以Spring 的 bean 没有被回收正是因为在 AbstractApplicatuonContext 的 registerShutdownHook 方法中与 ApplicationShutdownHooks 中的一个静态变量建立了可达的引用路径。 题外话 那么为什么类的静态变量可以作为 GC Root 呢抱着严谨的心态我们继续往下求证 类的静态变量属于类对象类对象由类加载器进行加载而类加载器是 GC Root那么类加载器是不是与被加载的类对象存在引用关系呢翻阅 ClassLoader 类赫然看到这一段代码: public abstract class ClassLoader {// The classes loaded by this class loader. The only purpose of this table// is to keep the classes from being GCed until the loader is GCed.private final VectorClass? classes new Vector(); }注释一目了然好家伙原来类加载器把所有的已加载的类对象都保存在这个容器里面怪不得类对象和类静态变量也属于 GC Root
http://www.sadfv.cn/news/347878/

相关文章:

  • 网站建设html模板精品课程网站开发
  • 北京网站建设V芯ee8888e色系网站
  • 男和男做的视频网站专门做衣服特卖的网站有哪些
  • 网站建设 h5 小程序苏州网站开发建设方法
  • 网络营销网站的功能云主机网站
  • 音乐网站的建设网站开发 文件上传慢
  • wordpress重复网站建个人网站有什么好处
  • 网站智能建设系统源码淄博网站建设企业
  • 吴兴网站建设广西壮族自治区教育厅
  • 网站制作公司服务wordpress部署到外网
  • 云网站 制作网易企业邮箱服务
  • 南充网站网站建设凉州区住房和城乡建设局网站
  • 卧龙区2015网站建设价格有什么网站可以做投票功能吗
  • 网站建设主要用什么软件以下哪些不属于h5制作软件
  • 建设网站哪个公司好中国3大做外贸的网站
  • 24小时网站开发 pdf接外贸单的平台
  • 网站+建设+拖拉+源码+系统弹幕网站怎么做
  • 2016年做水果行业专业网站公司logo设计用什么软件
  • 软件开发网站建设开发个网站开票名称是什么意思
  • 网站建设餐饮网站开发的作用
  • 海口网站建设网站制作太原网站建设列表网
  • 网站建设设计团队网站建设 企炬
  • 海南行指网站开发公司wordpress文章阅读数
  • 网站建设与管理收获池州网站建设
  • 手机网站开发下崽做搬家网站的素材
  • 做料理网站关键词怎么设置留手机号广告
  • 个人营销网站linux系统运行wordpress
  • 建设茶叶网站目的sqlite做网站
  • 安徽建设工程信息网站成都产品包装设计
  • 神农架网站设计做门窗投标网站