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

深入分析java web技术内幕----读书笔记(三)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a724888/article/details/62421108


claasloader读书笔记

claasloader

1classloaderclass加载到jvm中。

2、父优先的等级加载,双亲委派模型。

 

3defineclass用于将字节流解析成Class对象,主要用于读取class文件,以及网络文件中的类等。defineclass不会解析类,只会在此对象实例化时才会resolve

defineclassfindclass常一起使用,findclassclassloader中的方法,覆盖后可以自定义加载规则。

4this.getclass.getclassloader.loadclass可以在运行时加载指定类到程序。(只能在本程序的类加载器中加载).加载后还没解析,实例化时才resolve

5classforname()可以加载类并解析。

例子:;

Class.forName("org.java.lang",true,getClass().getClassLoader());参数为 类名、是否初始化、所用类加载器

getsystemclass也可以在自定义类加载器中加载类

 

6

Classloader是抽象类


  1. Bootstrap ClassLoader/启动类加载器 

    主要负责jdk_home/lib目录下的核心api-Xbootclasspath选项指定的jar包装入工作。

  2. Extension ClassLoader/扩展类加载器 

    主要负责jdk_home/lib/ext目录下的jar包或-Djava.ext.dirs指定目录下的jar包装入工作。

  3. System ClassLoader/系统类加载器 

    主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作。

  4. User Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类

    在程序运行期间,通过java.lang.ClassLoader的子类动态加载class文件,体现java动态实时类装入特性。

     

    自定义的类加载器都继承自URLclassloader或其他子类。

    但这些类的父加载器都是appclassloader

    因为它们都调用getsystemclassloader作为父加载器,getsystemclassloader的返回值都是appclassloader

     

    7、加载一个类的过程

     

     

     

     

     

     

     

    8jvm表示一个类是否是同一个类有两个条件:

    1、完整类名是否一样

    2、加载该类的classloader是否是同一个类加载器的同一个实例

    (不仅要类相同,实例也要是同一个)。

     

    9、回收问题:classloader加载的类的字节码(就是。class)会被保存在jvm的永久代,它的对象无引用时也会被jvm回收,但如果大量动态加载类时,会造成永久带溢出。(因为永久代只在full gc时清理,若full gc不频繁,会造成永久代内存溢出)

     

    systemgc会触发垃圾回收,但不知道回收情况如何。

    一般情况下systemgc会触发full gc,会stop the worldfull gc一般回收老年代和永久代。

     

     

相关文章:

  • 关于印发《天津市2010年节能与资源综合利用 清洁生产和环保产业工作要点》的通知...
  • java类加载器的父亲委托机制详细介绍
  • Linux裸设备相关命令
  • JavaSE 学习参考:接口
  • CISCO路由器配置基础3
  • Photoshop中消失点(Photoshop帮助文档)
  • Selenium2+Python--等待页面元素加载(wait)
  • Swift 数据类型
  • 服务台的工作流程
  • 【深度分解】听趣拍云产品经理剖析视频基础知识(1)
  • windows server 2003 FTP服务器不能下载原因
  • 上火了
  • 干货:让你分分钟学会 JS 闭包
  • jeffcroft/html5 Two thousand twenty two
  • 11种QQ技术 ,让你成为QQ高手
  • 「面试题」如何实现一个圣杯布局?
  • Angularjs之国际化
  • Cookie 在前端中的实践
  • ECS应用管理最佳实践
  • flask接收请求并推入栈
  • Mac转Windows的拯救指南
  • python docx文档转html页面
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Vim Clutch | 面向脚踏板编程……
  • Vue2.0 实现互斥
  • Yeoman_Bower_Grunt
  • Zepto.js源码学习之二
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 包装类对象
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 关于Flux,Vuex,Redux的思考
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 微信小程序--------语音识别(前端自己也能玩)
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • (10)STL算法之搜索(二) 二分查找
  • (k8s中)docker netty OOM问题记录
  • (二)换源+apt-get基础配置+搜狗拼音
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (图)IntelliTrace Tools 跟踪云端程序
  • (学习日记)2024.01.09
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .NET 4.0中的泛型协变和反变
  • .NET Core Web APi类库如何内嵌运行?
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .Net6使用WebSocket与前端进行通信
  • //解决validator验证插件多个name相同只验证第一的问题
  • ::什么意思
  • @RequestParam详解
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [bzoj 3534][Sdoi2014] 重建
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [c]统计数字