首页
宇行信
取消

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次,计数...

JVM类加载机制及类加载器

类加载时机 我们都知道JVM通过加载.class文件,能够将其中的字节码解析成操作系统机器码。那么JVM加载时类的初始化是什么时候呢?大致有这么5种情况: 遇到new、getstatic、putstatic或invokestatic这四条字节码指令时,如果类没有进行过初始化,则需要先对其进行初始化。生成这四条指令的最常见的Java代码场景是: 使用new关键字...

JVM内存区域以及内存管理

内存区域划分 JVM内存布局在Java8以及之后做了一些修改,方法区做了一些变化:将原来永久代(Permanent Generation)移除了,改为使用元空间(Metaspace)来代替,因此原来的两个调优参数:-XX:PermSize和-XX:MaxPermSize被弃用了,改为使用-XX:MetaspaceSize 和 -XX:MaxMetaspaceSize 来指定元空间的大小。如...

Android构建流程分析

APK组成 我们都知道APK其实本质是一个压缩包文件,我们可以通过手动解压或者在Android Studio中的APK分析器我们可以看到,他最终是由这几部分组成: Dex文件:.class文件通过d8工具处理后端产物,Android虚拟机可以执行的文件 Resource文件:资源文件,主要包括layout,drawable,animator等 resources.arsc:...

Android构建工具Gradle解析

Gradle 是一个开源的自动化构建工具,其核心是基于 Java 实现,可以把它看成一个轻量级的 Java 应用,可以使用 Groovy 或 Kotlin 来编写脚本,简化了开发时对项目构建要做的配置,使用更加灵活和强大。 配置文件 build.gradle 该文件是项目构建文件,每个工程都有一个build.gradle文件,它在配置阶段执行,并创建相应工程的Project对象,执行的...

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

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

关于Code Review的一些思考总结

Code Review 提高代码质量 提前发现bug 统一代码规范 提高团队成员代码技能 总之,前期找问题(代码规范、潜在缺陷、BUG,代码设计等等),后期演变成开发者技术交流和员工成长 如何开展 代码规范:明确Coding规则 检视清单:结合业务特点,check重点 总结优化:透明问题,持续优化 激励措施:激发主观能动性 开展方式 ...