一、定义 布隆过滤器(Bloom Filter)是一种概率型数据结构,用于判断一个元素是否在一个集合中。它由 Burton Howard Bloom 在 1970 年提出。布隆过滤器的特点是空间效率高和查询速度快,但是有一定的误判率,并且一旦添加元素后无法删除。 二、布隆过滤器的工作原理 2.1 初始化 创建一个位数组(bit array),长度为 m,所有位都初始化为 0 2.2 插入元素 对于每一个要加入集合的元素,使用 k 个不同的哈希函数对该元素进行哈希,得到 k 个不同的索引位置。将这些位置上的位设置为 1 2.3 查询元素 当查询一个元素是否存在于集合中时,同样用上述 k 个哈希函数对元素进行哈希,检查所得的 k 个位置上的值是否全都是 1。如果全是 1,则认为该元素可能存在于集合中;如果有一个位置是 0,则可以确定该元素不存在于集合中 三、特点 优点 : 空间效率高:相比于其它数据结构如哈希表或二叉树,布隆过滤器占用的空间更小。 查询速度快:由于只需要计算几个哈希函数,所以查询速度非常快。 可以节省大量的存储资源,尤其是在处理大数据量的情况下。 缺点 : 存在误报(F.... 有更新! 布隆过滤器 程序人生
一、类生命周期 1.1 加载 通过类全限定名获取它的二进制字节流 从ZIP压缩包、JAR、EAR、WAR中获取 从网络中获取,例如Web Applet 运行时计算生成,如动态代理技术 从数据库读取 从加密文件中获取 将这个字节流所代表得静态存储结构转化为方法区得运行时数据结构 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据得访问入口 1.2 链接 1.2.1 验证 验证阶段确保加载的类的信息符合JVM规范,不会对JVM造成危害。这包括对字节码的结构、常量池中的索引、数据类型等进行检查。 文件格式验证 魔数是否是CAFEBABE 主次版本是否在虚拟机支持范围内 ...... 元数据验证 这个类是否有父类(除了java.lang.Object外,其他类都有父类) 父类是否继承了不允许被继承的类 ...... 字节码验证 确保类型转化是有效的,例如把父类对象赋值给子类数据类型就是无效的 ...... 符号引用验证 符号引用中的类、字段、方法的可访问性(private\protected\public\)是否可以被当前类访问 在指定类中是否.... 有更新! Java虚拟机--类加载器 程序人生
一、简介 Java各个版本能够保持非常良好的向后兼容性,Class文件结构的稳定性功不可没,不同版本的Java虚拟机规范也只是在原有基础上新增内容、扩充功能。 二、Class类文件结构 这里只列举class文件各项标识得作用,详细信息可以参考官网第 4 章。类 File Format (oracle.com) 2.1 Class文件内容 文件内容如下 ClassFile { u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; u2 access_flags; u2 this_class; u2 super_class; u2 interfaces_count; u2 interfaces[interfaces_count]; u2 fields_count; field_info fields[fields_count]; u2 methods_count; method_info methods[metho.... 有更新! Java虚拟机--字节码文件结构 JVM
一、javap -v javap是jdk自带的反编译工具,可以通过控制台查看字节码文件内容 javap -v 字节码文件 二、JClasslib idea可以安装这个插件,直接在插件市场就能搜索到,安装完成后,选中class文件,点击view,就可以看到对应选项 三、阿里Arthas 3.1 简介 官网文档https://arthas.aliyun.com/ Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率 3.2 下载安装 下载地址https://arthas.aliyun.com/arthas-boot.jar git指定版本下载地址Releases · alibaba/arthas (github.com) 编写如下代码并运行 public class HelloWorld { public static void main(String[] args){ Thread thread = n.... Java虚拟机--常用工具 JVM
一、简介 Java虚拟机(JVM,Java Virtual Machine)是一种虚拟计算机,它提供了一个运行环境,使得编译后的Java程序可以在几乎所有的计算机平台上执行,而无需针对每个平台进行单独的编译。以下是JVM的一些关键概念和特点: 平台独立性 : JVM的核心价值在于它实现了“一次编写,到处运行”的理念。Java源代码被编译成字节码(Bytecode),这是一种中间语言,由JVM解释并在本地平台上执行。这意味着相同的字节码可以在不同的操作系统和硬件架构上运行,只要存在对应的JVM实现。 字节码与JVM : Java编译器将Java源代码编译成字节码,字节码是一种低级别的指令集,由JVM解释或即时编译(JIT)成机器码执行。字节码的使用保证了程序的安全性和可移植性。 内存管理 : JVM管理着应用程序的内存分配和垃圾回收。它分为几个主要的内存区域,包括: 堆(Heap) :用于存储对象实例和数组。 方法区(Method Area) :存储类信息、常量、静态变量、即时编译器编译后的代码缓存。 栈(Stack) :线程私有的,用于存储局部变量、操作数栈、动态链接和方法出口.... Java虚拟机--简介 JVM