java

探秘线程池 ThreadPoolExecutor 的任务调度过程

线程池是 java 并发包的核心组件之一,为了减少线程创建和销毁所带来的性能开销,在实际项目中都会采用线程池来管理线程的创建、复用,以及消亡等过程。Executors 类提供了多种方法来简化线程池的创建,典型的应用场景如下: 12in...

探秘 ThreadLocal 的实现内幕与小地雷

探秘 ThreadLocal 的实现内幕与小地雷

Java 多线程类库对于共享数据的读写访问主要采用锁机制来保证线程安全,而本文所要探究的 ThreadLocal 则采用了一种完全不同的策略,它不是用来解决共享数据的并发访问问题的,ThreadLocal 让每个线程都将目标数据复制一...

探秘JVM:方法解析与分派调用

探秘JVM:方法解析与分派调用

在不同的虚拟机实现中,执行引擎在执行 java 代码时可能会有 解释执行(通过解释器执行)和 编译执行(通过 JIT 生成本地代码执行)两种选择,也可能是二者兼备,但不管采用哪种方式执行,当我们调用一个方法的时候,都需要确定我们调用方...

探秘JVM:类加载机制

JVM 的类加载机制描述了类数据从字节码文件加载到内存,并对其进行校验、解析、初始化、直至成为能够被 JVM 直接使用的 java 数据类型的过程。 类的整个生命周期包括: 加载、连接(验证、准备、解析)、初始化、使用、卸载 5 个阶...

探秘JVM:垃圾收集与内存分配策略

探秘JVM:垃圾收集与内存分配策略

JVM 中的程序计数器、java 虚拟机栈、本地方法区属于线程私有,其生命周期控制在线程生命周期范围之内,并且 java 虚拟机栈和本地方法区则随着栈帧的出栈入栈由生到灭,所以这些区域的内存使用是确定性的(编译期已知),而 java ...

探秘JVM:运行时数据区域

JVM 内存区域从概念模型上主要分为 堆、方法区、java 虚拟机栈、本地方法栈、程序计数器 五大模块,其中前两者属于线程共享,而后三者属于线程私有,如下图: 一. 线程共享区域1.1 方法区 调整指令:-XX:PermSiz...

Java 8th 函数式编程:默认接口方法

Java 8th 函数式编程:默认接口方法

Java 8th 可以看做是 java 版本更新迭代过程中变化最大的几个版本之一(与时俱进,方能不灭),但是经过这么多年的发展和迭代,java 的源码俨然已是一个庞然大物,要在这样庞大的体积上大动干戈必定不易。所以当第一次看到默认接口...

Java 8th 函数式编程:流式数据处理

第一次接触到流式数据处理的时候,第一感觉是流式数据处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式数据处理可以在一行中实现。比如我们希望对一个包含整数的集合筛选出所有的偶数,并将其封装成为一个新的集合返回,...

Java 8th 函数式编程:Optional 类型

Java 8th 函数式编程:Optional 类型

NullPointException 可以说是所有 java 程序员都遇到过的一个异常,虽然 java 从设计之初就力图让程序员脱离指针的苦海,但是指针确实是实际存在的,而 java 设计者也只能是让指针在 java 语言中变得更加简...

Java 8th 函数式编程:lambda 表达式

Java 8th 函数式编程:lambda 表达式

Lambda 表达式是 java 8th 给我们带来的几个重量级新特性之一,借用 lambda 表达式可以让我们的程序设计更加简洁。最近新的项目摒弃了 6th 版本,全面基于 8th 进行开发,本文将探讨 行为参数化、lambda 表...