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

黑马JVM总结(二)

(1)栈

栈帧对应一次方法的调用,线程是要执行代码的,这些代码都是由一个个方法组成,线程运行的时候每个方法需要的内存叫做一个栈帧 

(2)栈的演示

Frames:相当有栈   方法相当于栈帧,Variables:方法的参数

活动栈帧在我们栈的顶部正在执行的栈帧叫做活动栈帧

method2栈帧执行完释放掉出栈

 method1:执行完出栈

 主方法再执行,执行结束

(3) 栈的问题辨析

 

 1.栈帧内存在每一次方法结束后都会弹出栈,会自动的被回收掉,不需要垃圾回收管理栈内存

2.栈划分的越大,反而会使线程数变少,划分大了只是能够进行更多次的方法递归调用,并不是划分越大越好,增强运行的效率

3.需要看多个线程对这个变量时共享的或者这个变量对你每个线程是私有的

比如说多个线程调用这个方法,会不会造成 x值的混乱呢?不会的因为x变量是方法内的局部变量,一个线程对应一个栈,线程内每一次方法的调用都会产生一个新的栈帧 ,他们是互不干扰的

如果变量时static的:如果不加线程安全 保护的话,就会产生线程安全问题

如果是共享的需要考虑线程安全问题,你是每个线程私有的就不用考虑线程安全问题

 

(4)栈问题辨析-线程安全

m1方法不会产生线程安全问题,因为sb是线程内的一个局部变量,是属于每个线程私有的,是线程安全的

m2:不是线程安全的,因为作为方法的参数,意味着可能有其他的线程可能访问到它,他就不是线程私有的啦对多个线程是一个共享的

m3:也不是线程安全的,因为他把结果对象返回啦,其他线程可能拿到这个参数进行修改

main方法中把它作为参数进行修改,其他线程也进行修改,它就是线程共享的啦,多个线程共享一个对象,需要使用StringBuffer

http://www.lryc.cn/news/161116.html

相关文章:

  • 《Effective C++中文版,第三版》读书笔记7
  • 脚本:python实现动态爱心
  • 【李宏毅】深度学习6:机器学习任务攻略
  • 如何使用SQL SERVER的OpenQuery
  • element-tree树结构-默认选中第一个节点高亮-根据id选中节点高亮
  • Python实操 PDF自动识别并提取Excel文件
  • JVM监控和调优常用命令jps|jstat|jinfo|jmap|jhat|jstack实战
  • chatglm2-6b在P40上做LORA微调 | 京东云技术团队
  • WebGL 同时使用多幅纹理
  • 探索云计算和大数据分析的崛起:API行业的机遇与挑战【电商大数据与电商API接入】
  • android studio通过wifi、无线连接设备
  • kafka 3.5 主题分区ISR伸缩源码
  • 1-centOS7搭建伪分布式
  • 对开源自动化测试平台MeterSphere的使用感触
  • Spring boot 第一个程序
  • 【SpringMVC】实现增删改查(附源码)
  • 理财是什么?怎样学习理财?
  • 华为云云耀云服务器L实例评测 | 开启OPC UA之旅
  • 帝国CMS灵动标签如何调用$ecms_hashur[‘ehref‘]函数
  • ES6 拓展(下)
  • TouchGFX之自定义触发条件和操作
  • Linux防火墙(iptables)
  • zookeeper教程
  • 杭州快递物流展-2024长三角快递物流供应链与技术装备展览会(杭州)
  • CSP 202203-1 未初始化警告
  • 开发指导—利用组件插值器动画实现 HarmonyOS 动效
  • 树莓派入门
  • 算法模型嵌入式 Mendix应用的开发示例
  • 如何使用Cygwin编译最新版的Redis源码,生成适用于Windows的Redis
  • Linux 修改SSH端口