yuxingxin

Java同步实现原理与锁优化

我们知道,Java中通过synchronized关键字来实现同步,而同步的基础:Java中每一个对象都可以作为锁,表现在以下3个方面: 对于普通同步方法,锁是当前实例对象。 对于静态同步方法,锁是当前类的Class对象。 对于同步方法块,锁是Synchonized括号里配置的对象。 当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。 sync...

Java内存模型JMM与多线程

首先注意的是JMM(Java Memory Model)Java内存模型与JVM的内存结构不是一个概念,前者常和多线程相关。 缓存一致性 我们知道线程是CPU调度的最小单元,线程中的字节码指令最终都会在CPU中被执行,所以它免不了和各种数据打交道,而Java中所有的数据是存放在主内存(RAM)中的,随着CPU技术的发展,CPU的执行速度越来越快,但内存的技术并没有太大的变化,所以在内存中...

JVM对象回收机制(下)

我们知道当内存空间达到一定条件时,会自动触发。这个过程就叫作 GC,负责 GC 的组件,就叫作垃圾回收器。按照语义上面理解,垃圾回收首先需要找到的是这些垃圾,然后回收掉,但是GC过程正好相反,它是先找到活跃的对象,然后把其他不活跃的对象判定为垃圾,然后删除。所以垃圾回收只与活跃的对象有关,和堆的大小无关。 标记-清除算法 就像我们前面说的,GC过程正好相反:垃圾回收的第一步,就是找出活跃...

JVM对象回收机制(上)

我们知道Java实例对象存储在堆中,等不用的时候,GC会回收它,但是GC是不受程序控制的,它会在满足条件时自动触发。那我们接下来就聊一聊这个条件。 在发生GC时,一个对象,JVM总能找到引用它的祖先,最后发现这个祖先已经被回收,那么它们就都会被清理掉,而能够躲过垃圾回收的那些祖先,我们管它叫GC Roots。 引用计数法 该方法是在对象头里面维护了一个计数器,每当该对象被引用1次,计数...

基于Hacker News的内容热度推荐算法

前言 近期公司产品需要做一个内容推荐的功能,但限于人员和能力有限,经过调研,确定了一个简单相对我们可以实现的方案。一篇文章产生,随着用户浏览、点赞、分享、收藏、评论,热度逐渐攀升,进入榜单到推荐页面,但随着时间的推移,这篇文章也不能永久的霸占榜单,让后面新产生的文章没有机会到推荐页,因此也就有了时间衰减的因素,从而可以让榜单能够动态的变化,除了上面基本的原理以外,还需要人为干预因素,通过加权...