没有合适的资源?快使用搜索试试~ 我知道了~
首页jvm java虚拟机 调优 马士兵 笔记
jvm java虚拟机 调优 马士兵 笔记
4星 · 超过85%的资源 需积分: 50 123 下载量 20 浏览量
更新于2023-05-27
评论 1
收藏 3.07MB DOC 举报
jvm java虚拟机 调优 马士兵 笔记 让你对java虚拟机调优有初步的认识
资源详情
资源评论
资源推荐
调优
目录
概述
内存结构
堆内存
)堆内存结构
)解释:
什么是垃圾
垃圾收集算法
(标记清除)算法
(拷贝)算法
(标记压缩)算法
总结:
参数
设置 参数
指定垃圾收集器( !"#$ %)
)收集器介绍
)收集器简单对比
)收集器选择
& 对象的分配
)对象栈上分配
)对象分配到线程本地内存 '()* + !",-.,简称 '*+,
)总流程
/例子程序
)对象是否分配到栈空间与线程本地空间的效果
)观察有没有使用 '*+, 时,)" 区的内存变化。/
)查看内存消耗情况
)堆内存溢出追踪
0-
)调整虚拟机栈空间大小
/%% 优化配置
)典型配置
)%% 中配置 参数
)基本的调优性能测试思路
概述
调优往往出现在部署或者架构工程师对 虚拟机的调优,让其性能达到最好。
原则:无监控不调优。意思是你调优之前必须有确切的性能论证,因为调优的过程必须进行测试验证,如果没有
性能结果对比,调优是没有意义的。
内存结构
① 虚拟机栈:虚拟机栈空间是线程独有的空间,每个线程都会拥有一份虚拟机栈空间,这个很重要。知道栈帧的
概念,每个方法加载到虚拟机栈中都以一个栈帧的形式存在,栈帧中存放着方法的形参,局部变量,动态链接,
方法出口等。百度百科的解析是:$ 语言中,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地
址和局部变量。从逻辑上讲,栈帧就是一个函数执行的环境:函数参数、函数的 局部变量、函数执行完后返回到
哪里等等。当某方法被某线程执行的时候,线程所属的虚拟机栈中会生成该方法的栈帧,所以栈帧都是归属于各
自的线程的,栈帧的内容只有该线程能读取,所以多个线程执行同一个方法的时候,方法都能在各自线程中独立
执行,互不干扰。
② 本地方法栈:存放 "! 方法的栈帧,与底层硬件方法接触,不需要深究。
③ 堆:存放实例化的对象。
④ 方法区(又叫永久区 1""%2"!"):防止类信息,静态便令,常量等。
堆内存
其实常说的虚拟机优化主要是堆内存区的优化。它是虚拟机内存中最大的一块区域。
)堆内存结构
)解释:
宏观来讲可以分成 " 区和 ) 区,也称为新生代区和老年代区。
新生代又分成三块,一块 )"(伊甸园)区,两块 -0(幸存者)区,两块 -0 大小是一样的。老年
代只有一块,叫 %"-)(老教授)区。
对象被放到堆内存中各块的逻辑:一个对象被 " 出来后,如果特别大的对象,直接放到 %"-) 区,否则都
被放置在 )" 区,所以 )" 区就是放置新生对象的区域。经过一次 2$(垃圾收集)后,)" 区中的对象依然有
引用指向(也就是说有变量指向它),则这些对象会转移到 -0 区,其他对象被回收,转移到 -0 区的过
程看“(拷贝)算法”。当经历了 " 次 2$ 后,对象依然没被回收,会放到 %"-) 区去。如果对象拷贝到
-0 中发现装不下了,也会直接放置到 %"-) 区中。
各区的空间比例:如果 " 区分成 / 份,那么 )" 区占 份,-0 区分别占 份。而 " 区对 ) 区的
比例往往是 34343 等等。)" 区设置比较大因为初生的所有小对象都会放到 )" 区,而 -0 设置比较小
因为经过 2$ 后,剩下的对象往往已经很少了,而且 -0 设置比较大的话,会浪费内存。老年代设置比较大原
因是他存放的是大对象,并且程序中所有多次 2$ 未被回收的对象都会放到这个区中。
什么是垃圾
我们一般认为没有引用指向的对象,虚拟机认为是可回收的垃圾,比如 %0"#5"%0"#6789,对象 放
在栈中,当我将 "- 赋值 ,那么 引用就不在指向该对象了,那么该对象就是垃圾。另外一种情况是,如果两个
对象内部有引用相互指向,形成一种死锁结构,那么这两个对象也称为垃圾,引申开来,如果一堆对象内部形成
一个闭环的引用,那么这些对象都看作是垃圾。
对 于 如 何 确定 垃圾 , 需 要弄 明白 强 、 软 、 弱、虚 引 用 的 概 念 , 参 考 (:3;;"< #;=(;;
/(% 。
其中有两种算法用于判断对象是否为垃圾:
① 引用计数:
意思是记录某个对象有多少个引用指向,只要不等于 /,则表示有它不是垃圾,但是这种算法有问题,就是上面说
的循环引用或者闭环引用,这种算法无法识别。
② 正向可达:
意思是,虚拟机中有一个 2$% 节点,你可以认为这是一个逻辑节点,所有的初始引用都在这个节点上,那么每
个引用指向一个对象,那么这个对象肯定不是垃圾,如果这个对象里面又有一个引用指向另一个对象,那么被指
向的对象也不是垃圾,依次类推,顺着藤摸瓜,除了这些正向可达的对象,其他对象都是垃圾,而且正向可达是
可以区分循环引用和环形引用垃圾的。
垃圾收集算法
①(标记清除)算法
意思是,图片右上方网格中,黑色的块表示虚拟机识别出来的可回收垃圾对象,标记清除算法就是为这些黑色的
块做一个记号,2$ 的时候,找到有记号的内存块,将其内容清除,最终变成右下方的网格。
优点:刚开始的时候,效率非常高,不需要做内存间的拷贝。
缺点:清除后的内存呈零散状态的可用空间,而大对象需要连续的内存空间,如果一个大对象在这些零散的标记
清除过后的内存中找不到地方存放,虚拟机会进行一次 >- #,将内存区域压缩,也就是将零散的内存块排整齐后
再存放该大对象,这样效率反而会低。
②(拷贝)算法
意思是,看右上方的网格,它将内存分成上下两个等大小的空间,最开始的时候使用上层网格空间,灰色格子表
示对象,当 2$ 发生后,上层的灰色格子拷贝到下层的完全未使用的内存空间中,同时,灰色格子被压缩排列整齐,
然后上层网格所有内存被清理,变成绿色可用空间,此时新进来的对象就放到下层的绿色网格空间中,完成一次
2$ 过程,如果再一次 2$,同理,下层的灰色对象会全部拷贝到上层,排列整齐,清空下层空间,新来的对象存放
在上层…以此类推。这就是 -0 区默认算法,从 层到 < 层拷贝,那 层会被称为 >,< 层会被称为 %
,上下两层轮流作为 > 和 %。
优点:解决标记清除算法的内存碎片化的问题。效率很高,不管是拷贝,还是清除整块空间的内存,速度都是非
常快的。而且顺带的进行了内存的压缩。
缺点:浪费内存,因为它的机制是来回拷贝,所以同一时间永远只有一半的内存得到使用。
③(标记压缩)算法
意思是,标记出可回收的对象后,将存活的对象往内存的一端压缩,然后清除剩余的所有连续内存。
优点:实际上这个算法是老年代内存区的默认算法,因为老年代中,存活对象比较多,垃圾对象比较少,这个算
法压缩的过程实际上是将存活的对象替换掉垃圾对象,所以在垃圾对象比较少的情况下,只需要很少的操作就能
完成 2$。
缺点:这种算法效率并不算高,比较适用于老年代区的垃圾回收。
④ 总结:
采用的是分代算法,也就是不同的年代区域,根据垃圾的多少采用不同的算法。
剩余17页未读,继续阅读
disalong
- 粉丝: 16
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论3