技巧1:预测收集容量
所有标准java集合,以及大多数自定义和扩展实现(如Trove和Google的Guava)都使用底层数组(基于原语或基于对象)。由于数组在分配后大小是不可变的,因此在许多情况下,向集合中添加项可能会导致删除旧的底层数组,而选择新分配的较大数组。大多数集合实现都试图优化此重新分配过程,并将其保持在摊销最小值,即使未提供集合的预期大小。但是,通过在构建时为集合提供其预期大小,可以实现最佳效果。
技巧2:直接处理流程
在处理数据流时,例如从文件读取的数据或通过网络下载的数据,通常会看到以下内容:
在处理大型文件或大小不可预测的文件时,这显然是一个坏主意,因为如果JVM无法实际分配整个文件大小的缓冲区,它会使我们暴露出OutOfMemory错误。在java培训中,有很多关于GC的培训课程,在专业老师的教学指导下,可以很全面地掌握GC的相关知识和技能。
更好的方法是使用适当的InputStream(本例中为FileInputStream)并将其直接提供给解析器,而无需首先将整个内容读入字节数组。所有主要库都公开API以直接解析流,例如:

技巧3:使用不可变对象
不变性有许多优点。它对垃圾收集的影响很少得到应有的关注。不可变对象是一个对象,其字段(在本例中特别是非基本字段)在对象构造后无法修改。
不变性意味着不可变容器引用的所有对象都是在容器构造完成之前创建的。在GC术语中:容器至少和它所持有的最年轻引用一样年轻。这意味着,当对年轻代执行垃圾收集循环时,GC可以跳过位于较老代中的不可变对象,因为它确定这些对象不能引用正在收集的代中的任何对象。要扫描的对象越少意味着要扫描的内存页越少,而要扫描的内存页越少意味着GC周期越短,这意味着GC暂停时间越短,总体吞吐量越好。想学习java技术的同学,不妨报个Java培训班,有明确清晰的学习路线,理论知识+实战操作,可以获得快速提升。
想了解更多相关资讯请关注Java培训频道-查看更多,了解相关专业课程信息您可在线咨询也可免费申请试课。关注赋能网了解更多:4008-569-579
本文链接:
本文章“Java培训:编写GC高效代码3个技巧”已帮助 98 人
免责声明:本信息由用户发布,本站不承担本信息引起的任何交易及知识产权侵权的法律责任!
本文由赋能网 整理发布。了解更多培训机构》培训课程》学习资讯》课程优惠》课程开班》学校地址等机构信息,可以留下您的联系方式,让课程老师跟你详细解答:
咨询热线:4008-569-579


