查看: 623|回复: 0

连引用都不懂的话,凭什么说你会JAVA游戏服务端的开发

[复制链接]

4783

主题

5079

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
18913

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

发表于 2020-3-3 12:50:24 | 显示全部楼层 |阅读模式
连引用都不懂的话,凭什么说你会JAVA游戏服务端的开发 https://www.gmbbs.net/读完这篇文章后,《干货点》基本上可以回答采访热点[谈对Java游戏服务端中几个参考文献的理解]。
人人都知道我公司的副业是
我甚至不能回答参考。为什么你说你是一个Java游戏服务端服务器端开发人员?
因此,朋友们经常来我这里打水。最近,他们提到了一次面对面的考试。
对Java游戏服务端中几个参考文献的理解。
因此,我打算以这个问题为例,写一篇关于在Java游戏服务端中引用什么以及如何使用它的文章。[·福克斯:给你三秒钟的时间思考。如果你是,你如何回答面试官的问题]
引文是什么
[亮点]爪哇的参考文献包括:
最终引用强引用
软参考软参考
弱引用弱引用
虚拟参考
那么你为什么提供这四个参考,主要原因是:
Jvm回收垃圾很方便
它便于开发人员使用,并且开发人员可以灵活地确定某些对象的生命周期。
如何使用日常开发
如果我们应用我们所学的,我们如何在日常生活中使用这些语录?接下来我将给出相关的演示!
最终引用强引用
像对象o=新对象()这样的引用在对象创建后保存在JVM堆栈中,只要存在强引用,垃圾收集器就不会回收被引用的对象。
日常使用
强引用的例子比比皆是,因为在日常开发中,我们经常去一个新对象,这个新对象被强引用,也就是说,只要引用存在,垃圾收集器就不会回收它。[亮点:JVM如何知道引用是否存在?】
软参考软参考
如果没有足够的内存用于与软引用相关联的对象,则与这些软引用相关联的对象将被包括在垃圾收集范围内,然后被收集,这意味着软引用不是完全安全的,并且如果没有足够的内存,将被垃圾收集器收集。
演示一下
我甚至不能回答参考。为什么你说你是一个Java游戏服务端服务器端开发人员?
从注释中可以看出,我在这里实例化了许多大型对象,然后将它们放入softReferences数组,然后遍历打印对象的名称。打印结果如下
我甚至不能回答参考。为什么你说你是一个Java游戏服务端服务器端开发人员?
从结果中可以看出,由于内存不足,垃圾收集器回收了前四个对象。
日常使用
在我们公司的项目中,软引用部分用于存储从数据库中检索的数据。具体来说,中间层是用来封装数据的。中间层的功能是在获取数据时判断数据是否为空。如果为空,则再次从数据库中读取,然后放入软引用集中。这种方法可以避免内存溢出。
弱引用弱引用
弱引用比软引用弱。与弱引用相关联的对象只能存活到下一次垃圾收集,也就是说,当发生垃圾收集时,不管当前内存是否足够,都将收集它们。
演示一下
我甚至不能回答参考。为什么你说你是一个Java游戏服务端服务器端开发人员?
代码非常短,也就是说,首先构建一个弱引用对象,然后在gc之前打印出来以证明它的存在,然后手动调用gc,再次打印,您可以看到它已经消失了。运行结果如下
我甚至不能回答参考。为什么你说你是一个Java游戏服务端服务器端开发人员?
虚拟参考
虚拟引用和上面的区别在于,一个对象是否有虚拟引用根本不会影响它的生命周期,也不可能通过虚拟引用获得一个对象的实例,也就是说,它可以在任何时候被垃圾收集器回收,就像没有引用与它相关联一样。
所以很容易产生怀疑。虚拟参考的功能是什么?
该函数用于在收集器收集对象时接收系统通知,以便跟踪垃圾收集器的收集操作。例如,当对象被收集时,将调用对象的finalize方法。
在进行相关演示之前,我们应该先介绍一个
引用队列引用队列
引用队列引用也可以概括为引用的一个成员,并可以与上述三种引用类型([软引用、弱引用和虚拟引用)结合使用。
那么它有什么作用呢?
当创建引用时,队列注册被手动放入引用,当引用所引用的对象被垃圾收集器收集时,JVM将把引用放入队列,我们可以对队列做其他服务,这相当于通知机制。
演示一下
我甚至不能回答参考。为什么你说你是一个Java游戏服务端服务器端开发人员?
从演示中可以看到队列的使用,运行打印结果如下
我甚至不能回答参考。为什么你说你是一个Java游戏服务端服务器端开发人员?
从结果中可以看出,首先从引用中得到的对象是空的,这证明了上述不能通过虚拟引用获得对象的实例,将在回收后被放入队列。
与引用相关的概念
首先,为了便于JVM管理,引用是有状态的,可以分为以下四种状态
活动状态通常指的是开始时分配内存的状态。当被引用对象的可达性发生变化时,gc会将引用放入挂起队列,并将其状态更改为挂起。
挂起是指要放置在挂起队列中的对象。
入队意味着对象的内存已经被回收。
非活动这是最终状态,不能更改为其他状态。
JVM如何知道引用是否存在
JVM如何知道引用是否存在?这涉及到JVM的可达性分析算法。JVM可达性分析算法的简单思想是从一系列GC根开始向下搜索。搜索所遵循的路径称为参考链。当一个对象没有到气相色谱根的任何引用链时,这表明该对象从气相色谱根到这个对象是不可用的,这证明该对象是不可用的并且可以被回收。如下图所示
我甚至不能回答参考。为什么你说你是一个Java游戏服务端服务器端开发人员?
物品4、5、6是可回收的。因此,问题出现了,哪些对象可以用作气相色谱根?以下是一些
虚拟机堆栈中引用的对象
方法区域中由类静态属性引用的对象
方法区域中由常数引用的对象
JNI在本地方法堆栈中引用的对象
如果你想做深入研究,你可以百度谷歌或者等我做深入分析。
最后的最后
本文基本回答了“谈谈对Java游戏服务端中几个参考文献的理解”。如果你想要更深入的研究,你必须从源代码开始。下次我遇到这种采访问题时,我不会着急,因为只要我仔细阅读文章并记住一些关键点,我就不会被采访者问及,而“JVM如何知道引用是否存在”和“哪些对象可以用作GC根”的问题将在文章后面得到回答。


【GM论坛[www.gmbbs.net]免责声明】
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
4、论坛的所有内容都不保证其准确性,完整性,有效性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请告之,本站将立即删除。
   提问发帖求助请点此发帖 https://www.gmbbs.net/
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表