1. Java基础 - static 关键字

    static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局静态成员变量,修饰方法表示静态方法。

    2021/08/22 Java

  2. JVM - javap指令

    javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区 (汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。

    2021/08/22 JVM

  3. Java并发 - CAS与原子变量

    在 Java 并发领域,我们解决并发安全问题最粗暴的方式就是使用 synchronized 关键字了,但它是 一种独占形式的锁,属于悲观锁机制,性能会大打折扣。volatile 貌似也是一个不错的选择,但 volatile 只能保持变量的可见性,并不保证变量的原子性操作。

    2021/08/06 concurrent

  4. 设计模式之 - 单例模式

    单例模式是软件开发过程中经常用到的一种设计模式,但如果优雅的实现单例模式,并不是一个简单的问题。

    2021/08/06 设计模式

  5. JVM - 对象的内存布局

    在 HotSpot 虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)、 实例数据(Instance Data)和对齐填充(Padding)。

    2021/07/29 JVM

  6. JVM目录汇总

    JVM知识梳理 内存区域 Class对象 JVM - 类加载器 引用类型 垃圾回收

    2021/07/29 JVM

  7. JVM - jstack工具

    jstack是JDK中自带的Java工具之一,用于生成虚拟机当前时刻的线程快照,含有正在执行的方法堆栈的集合信息, 生成线程快照的主要目的是定位线程出现长时间停顿的原因, 如线程间死锁、死循环、请求外部资源导致的长时间等待等问题。

    2021/07/29 JVM

  8. Java并发 - 锁分类

    锁概述 线程安全问题的产生前提是多个线程并发访问共享变量、共享资源(以下统称为共享数据)。 那么一种保障线程安全的方法是将多个线程对共享数据的并发访问转换为串行访问,即一个共享数据一次 只能被一个线程访问,该线程访问结束后其他线程才能对其进行访问。锁(Lock)就是利用这种思路以保障 线程安全的线程同步机制。

    2021/07/29 concurrent

  9. Java并发 - volatile 实现原理

    在多线程并发编程中 synchronized 和 volatile 都扮演着重要的角色,volatile 是轻量级的 synchronized,它在多处理器开发中保证了共享变量的”可见性”。可见性的意思是当一个线程修改一个 共享变量时,另外一个线程能读到这个修改的值。如果 volatile 变量修饰符使用恰当的话,它比 synchronized 的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。但是,volatile 不能保证原子性。

    2021/07/29 concurrent

  10. Java并发 - synchronized 关键字

    在多线程并发编程中 synchronized 一直是元老级角色,很多人都会称呼它为重量级锁。但是,随着 Java SE 1.6 对 synchronized 进行了各种优化之后,有些情况下它就并不那么重了。本文详细介绍 Java SE 1.6 中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构 和升级过程。

    2021/07/29 concurrent