我司自研的链路系统中的agent层记录日志时,使用的是异步打印日志的机制。异步打印会使用队列,现将待打印的日志对象,记录在队列中。
但这块的日志,为了不影响业务,例如不能因为链路记录的日志过多,导致业务应用oom,使用了软引用文章来源地址https://www.toymoban.com/news/detail-670646.html
BlockingQueue<SoftReference<SCLogEvent>> loggingQueue = new ArrayBlockingQueue<SoftReference<SCLogEvent>>(10000); // 异步队列
SoftReference<SCLogEvent> le = loggingQueue.take();
SCLogEvent logEvent = le.get();
if (null != logEvent) {
...
} else {
// 软引用对象被回收
}
- 强引用:强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它
- 软引用:如果一个对象只具有软引用,则内存空间充足时,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用
- 弱引用:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。
- 虚引用:虚引用顾名思义,就是形同虚设。与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
文章来源:https://www.toymoban.com/news/detail-670646.html
到了这里,关于软引用的使用场景-链路日志的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!