本帖最后由 大蓝鲸小蟀锅 于 2020-2-25 12:59 编辑
java虚拟机的了解
1.-x属性 java的一些基本设置
2.-xx 用来进行调优或者debug配置 可以设置一些jvm的启动属性 +/-用来开启或者关闭 返回一个boolean值 , 对变量赋值 menory=512M 变量值赋值
1.7和1.8jvm虚拟机的区别
1.7及之前分为 年轻代 老年代 永久代
1.8内存分为 年轻代 老年代 元数据区
去除了永久代,元数据是硬盘上面的一块空间,为将来热部署做一个准备.
年轻代 分为 EDen区 seviours区
老年代 old区
MAT工具对jvm内存对象进行分析
也可以使用java自带的工具 VisualVM工具在java/bin中 分析内存对象比较有用.
GC算法
1.引用计数法
优点: 简洁明了,效率高
缺点: 循环引用无法确定
2.标记清除法:
解决了循环引用的问题
缺点: 比较耗时间,容易导致内存碎片化
3.标记压缩法:
解决了内存碎片化的问题
缺点:seviours区对象比较少,效率比较高,但是serviours对象越来越多,效率越来越低.
4.复制算法:
解决了压缩发的效率问题
缺点:内存占用比较大,只能使用一般
5.分代算法:
每一个算法都有都有自己的优缺点.不能说哪一种算法好,哪一种算法差.所以在不同的分代中,使用最适合自己的算法.
1.8之前默认使用的是CMS垃圾回收器. Current Memory System
1.9默认使用的是G1垃圾回收器. 对内存进行了重新滑分,不设置标准的分区,而是把内存化成很多块,
每一块都可能是任何区,取消了物理划分,改动了逻辑划分,增加了一个大对象的保存区域.
垃圾回收的方式:
1.GC(cms,G1) 回收年轻代.
2.MixGC(G1) 回收年轻代和部分老年代,只有G1有
3.Full GC(cms,G1) 回收所有的年轻代和老年代.
可视化GC日志分析工具
GCEasy 百度就可以了
串行垃圾回收器
会把所有的线程全部暂停,只执行GC,保证GC的对象是没有问题的. CMS垃圾回收器
并行垃圾回收器
不会全部暂停,程序继续运行,同时运行GC,但是对象可能会有问题,所以步骤会比较多,会有两次标记 G1垃圾回收器
tomcat的管理界面.
其实就是猫的那个界面,里面有一个manager按钮,去登陆就好.
但是我们需要配置登录的用户名,在conf/tomcat-users.xml中,去配置登录tomcat管理者的用户角色和权限.
其中可以查看到jvm的内存运行情况,tomcat中每一个web应用的工作情况.
tomcat的优化
分为两个大类: 一种是对tomcat本身的优化 一种是对jvm参数调优
tomcat本身优化的三种方式
1.禁用AJP(Apache JServer Protocol)
WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,
WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期过程会重用连接。
但是这种情况是有使用apache服务器才支持这个协议,但是我们常用的是ngnix+tomcat,所以AJP无法使用,
既然无法使用,还需要消耗大量的资源维护他,肯定是很不合算的,所以一般直接禁用,
修改conf/server.xml中,把端口配置给注释掉即可
2.添加执行器(线程池)
在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能.
tomcat的运行模式有3种:
3.切换IO的执行模式,tomcat8中推荐使用nio2
1. bio
默认的模式,性能非常低下,没有经过任何优化处理和支持.
2. nio
nio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。
Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,
因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。
3. apr
安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.
推荐使用nio,不过,在tomcat8中有最新的nio2,速度更快,建议使用nio2.
对jvm优化
1.控制jvm占用的内存大小
2.设置使用G1的垃圾收集器 java9默认是G1
对自身代码的优化:
让自己写出代码执行效率更高的代码
|
|