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

在不同的虚拟机实现中,执行引擎在执行 java 代码时可能会有 解释执行(通过解释器执行)和 编译执行(通过 JIT 生成本地代码执行)两种选择,也可能是二者兼备,但不管采用哪种方式执行,当我们调用一个方法的时候,都需要确定我们调用方法的具体版本,因为在面向对象语言中存在封装、多态、继承的三大特性,一个方法可能因为重载和覆盖而存在多个版本。

阅读全文

探秘 JVM:类加载机制

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

阅读全文

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

JVM 中的程序计数器、java 虚拟机栈、本地方法区属于线程私有,其生命周期控制在线程生命周期范围之内,并且 java 虚拟机栈和本地方法区则随着栈帧的出栈入栈由生到灭,所以这些区域的内存使用是确定性的(编译期已知),而 java 堆和方法区是线程共享的,对象创建也是动态的,所以 垃圾回收的主战场在 java 堆和方法区。

阅读全文

设计模式:单例模式与多例模式

一. 单例模式1.1 单例模式解决的问题在面向对象程序设计中,只要内存允许我们通常都可以为一个对象创建任意个实例,但是一些场景下这不一定是一件好的事情。考虑一个文件类,在被使用之前需要从磁盘加载一定量的数据,我们肯定不希望每次调用该对象都去执行数据加载的操作,费时,而且同样的数据因为一个对象的实例化操作就要在内存中重复再存一份,显然是对内存的一种浪费,这个时候我们就希望对数据的加载操作只执行一次,后面所有的调用都是对这份数据的复用。这个时候我们就需要使用到单例模式,从而让这个对象在内存中仅有唯一的实例。

阅读全文

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

Java 8th 可以看做是 java 版本更新迭代过程中变化最大的几个版本之一(与时俱进,方能不灭),但是经过这么多年的发展和迭代,java 的源码俨然已是一个庞然大物,要在这样庞大的体积上大动干戈必定不易。所以当第一次看到默认接口方法的时候,我第一感觉就是这是设计人员在填自己之前挖的坑。 从前几篇的讲解中我们知道 8th 在现有的接口上添加了许多方法,比如 List 的 sort(Comparator<? super E> c) 方法。如果按照 8th 之前接口的设计思路,当给一个接口添加方法声明的时候,实现该接口的类都必须为该新添加的方法添加相应的实现(或将自己设置为抽象类)。考虑兼容性这样是不可取的,所以说这是一个坑,而新的特性又要求不得不为接口添加一些新的方法,为了兼得鱼和熊掌,设计人员提出了默认接口方法的概念。

阅读全文

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

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

阅读全文

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

NullPointException 可以说是所有 java 程序员都遇到过的一个异常,虽然 java 从设计之初就力图让程序员脱离指针的苦海,但是指针确实是实际存在的,而 java 设计者也只能是让指针在 java 语言中变得更加简单、易用,而不能完全的将其剔除,所以才有了我们日常所见到的关键字 null。 空指针异常是一个运行时异常,对于这一类异常,如果没有明确的处理策略,那么最佳实践在于让程序早点挂掉,但是很多场景下不是开发人员没有具体的处理策略,而是根本没有意识到空指针异常的存在。当异常真的发生的时候,处理策略也很简单,在存在异常的地方添加一个 if 语句判定即可,但是这样的应对策略会让我们的程序出现越来越多的 null 判定。一个良好的程序设计应该让代码中尽量少出现 null 关键字,而 8th 所提供的 Optional 类则在减少 NullPointException 的同时,也提升了代码的美观度。但首先我们需要明确的是它并 不是对 null 关键字的替代策略,而是对于 null 判定提供了一种更加优雅的实现,从而尽可能地避免 NullPointException。

阅读全文

转载:细聊分布式 ID 的生成方法

需求缘起几乎所有的业务系统,都有生成一个记录标识的需求,例如: 消息标识:message-id 订单标识:order-id 帖子标识:tiezi-id 这个记录标识往往就是数据库中的唯一主键,数据库上会建立聚集索引(cluster index),即在物理存储上以这个字段排序。这个记录标识上的查询,往往又有分页或者排序的业务需求,

阅读全文

Powered by hexo & Theme by hiero   Copyright © 2015-2019 浙ICP备 16010916  号,指 · 间 All Rights Reserved.