在项目越来越多的时候,部署在tomcat的发布包也会越来越多,这样难免有很多相同的jar会被加载,占用大量的永久存续区内存,通过设定shared lib来控制相同的jar只加载一个,这样有以下好处:

1、避免不同项目加载相同的jar,减少对永久存续区的内存占用

2、提高tomcat的启动速度,因为少加载了许多重复的jar

一、如何设定shared lib

方式一:

修改conf文件下的catalina.properties文件,配置shared.loader的路径:

配置绝对路径:

shared.loader="D:hs/develop/shared/lib","D:/hs/develop/shared/lib/*.jar"

之后将相同的jar放在指定的文件夹下。

或配置相对路径:

shared.loader="${catalina.base}/shared/lib","${catalina.base}/shared/lib/*.jar"

之后在和conf同目录下新建shared目录,将相同的jar放在lib里

方式二:

修改conf文件下的catalina.properties文件,配置common.loader的路径,追加shared lib的路径:

common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar","${catalina.home}/lib/shared/*.jar"

之后在lib文件夹下新建一个shared目录,并将相同的jar放在shared目录下

二、catalina.home和catalina.base的区别

在一个tomcat下,catalina.home和catalina.base指向相同的位置,即bin等目录的父目录。

若是在安装多个Tomcat实例又不想安装多个软件备份的时可以使用这两个属性,在tomcat目录下只有 bin 和 lib 目录被多个tomcat示例公用,其它目录conf、logs、temp、webapps和work 是每个Tomcat实例自己独立的备份。这时他们指向不同的位置:

  • catalina.home(安装目录):指向公用信息的位置,就是bin和lib的父目录。
  • catalina.base(工作目录):指向每个Tomcat目录私有信息的位置,就是conf、logs、temp、webapps和work的父目录。

三、tomcat6类加载机制

Commonclassloader:负责装载$CATALINA_HOME/common目录下的所有类和jar包,详细的配置可参考$CATALINA_HOME/conf/catalina.properties文件中的common.loader配置;该classloader装载的类对于Server class loader和Webapp class loader是可见的;Commonclass loader在Tomcat启动时创建,其parent classloader是System class loader;

Server classloader:负责装载Tomcat的核心类,位于$CATALINE_HOME/server目录下的所有类和jar,可由catalina.propreties中的server.loader配置指定;它在Tomcat启动时被创建,其parent loader是Commonclass loader;

Sharedclass loader:负责装载webapp公用的类,可以用户通过catalina.properties文件中的shared.loader属性来指定;它在Tomcat启动时被创建,其parentloader也是Common class loader;

Webappclassloader:它只负责加载各自app中WEB-INF/classes以及WEB-INF/lib下的类;其parentloader虽然是Shared class loader,但其加载策略和默认的类加载机制不太一样;

最新文章

  1. 在Centos6下面安装Python3.4
  2. C++面向对象基础知识
  3. aspxshell下突破无可写可执行目录执行cmd
  4. SerializableMaplist传递数据
  5. 流形学习(manifold learning)的一些综述
  6. cocos2d-x ios游戏开发初认识(五) CCsprite精灵类
  7. Linux基础(四)
  8. SpringMVC的filter怎么使用Autowired依赖注入bean
  9. 2019 Valentine's Day 圣地巡礼和WPR003N开箱刷U-boot记录
  10. iphone html5页面禁止点击数字就打电话
  11. IDEA导入springboot项目不能启动
  12. python 属性的访问权限,_,__,__XXX__
  13. Java模式—适配器模式
  14. kubeadm部署Kubernetes集群
  15. 1067 Sort with Swap(0, i) (25 分)
  16. 【LeetCode】35. Search Insert Position (2 solutions)
  17. 优步UBER司机全国各地奖励政策汇总:北京、上海、广州、深圳、佛山、天津、南京、武汉、成都、重庆、济南、西安、宁波、青岛、长沙、苏州
  18. React第二篇:组件的生命周期
  19. 任务调度 Quartz 学习(二) CronTrigger
  20. 用静态工厂的方法实例化bean

热门文章

  1. 正则表达式-Regex详解
  2. 一张图了解.Net Core和.NetFx和.Net Standard和Xamarin关系
  3. volatile、Synchronized实现变量可见性的原理,volatile使用注意事项
  4. 再谈C#装箱和拆箱操作
  5. 牛客小白月赛6 J 洋灰三角 数学
  6. lightoj 1021 - Painful Bases(数位dp+状压)
  7. java hdu A+B for Input-Output Practice (IV)
  8. Patch
  9. Day003_Linux基础——系统目录结构
  10. 人工智能-智能创意平台架构成长之路(四)-丰富多彩的banner图生成解密第一部分(对标阿里鹿班的设计)