JAVA语言:并发及GC
小标 2018-06-05 来源 : 阅读 574 评论 0

摘要:本文主要向大家介绍了JAVA语言的并发及GC,通过具体的实例让大家了解它们,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言的并发及GC,通过具体的实例让大家了解它们,希望对大家学习JAVA语言有所帮助。

1、synchronized

所重入场景:

继承关系的类,子类调用父类的方法----------线程安全

带有synchronized关键字的方法互相调用----------线程安全

2、volatile

作用:是变量在多个线程中可见,当改变变量值时(注意,改变的是主内存的值),每个线程的工作内存还是原先的值;

强制线程到主内存(共享内存)中去读,而不是去线程的私有内存中去读,从而实现多个线程中可见。

注意:此关键没有原子性,只有可见性,不能替代synchronized关键字的同步性

3、Atomic...

具有原子性,有boolean、Integer类型等;但是使用次关键字不能保证多次操作的原子性,只能保证此方法的原子性

4、线程之间的通信

使用wait和noyify方法实现线程之间的通信,两个方法都是Object的方法

wait和notify必须配合synchronized关键字使用,wait方法释放锁,notify方法不释放锁

5、java堆

有新生代和老年代

新生代:ende区、s0区和s1区(或者form区和to区)

ende区存放新生(第一次创建)的对象,每次发生GC,对象的年龄都会增大,这是对象会进入s0或者s1区,默认当

对象年龄满15之后,若对象还继续被引用,则会分配到老年代,s0和s1区大小相等并且角色可以相互转换

6、垃圾收集算法

引用计数算法:在对象被引用时计数器加1,而引用失去计数器减1;缺点,无法处理对象被循环引用的情况,并且每次进行加减操作比较浪费性能;

标记清除法:顾名思义,就是标记被引用的对象和清除所有未被标记的引用对象;缺点,会产生大量的空间碎片,浪费空间;

复制算法:主要用于新生代,对象存放在s0或者s1区,每次只会使用一块区域,在垃圾回收时,将存活的对象(未进入老年代的对象)复制到s1或者s0区,然后清空s0或者s1区;

标记压缩法:在标记清除法基础之上做了优化,主要解决的空间碎片的问题;把存活对象压缩到内存的一端,然后进行垃圾清理(jvm中老年代的GC就是使用的标记压缩法);

7、分区算法

把内存划分为N个区域,每个区域都可以独立使用,解决了GC时候扫描整块内存所消耗的性能,只需要清理某块区域;

8、TLAB区(Thread Local Allocation Buffer)

当产生一个对象过大的时候,会直接把该对象放入到老年代(还有一种是对象年龄大于15时分配到老年代),但要注意优先分配到TLAB区;

每个线程都有一块TLAB(Thread Local Allocation Buffer)区,该线程独享的工作区,是为了加速对象分配而产生的

TLAB区是逻辑概念(其实还是Eden区分配给线程的)

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程