使用Prometheus-Operator搭建监控集群 使用Prometheus-Operator搭建监控集群 云原生 云原生 k8s 使用Strimzi-Kafka-Operator搭建kafka集群 使用Strimzi-Kafka-Operator搭建kafka集群 云原生 云原生 k8s 使用Pocal-Path-Provisioner动态创建本地磁盘pv 使用Pocal-Path-Provisioner动态创建本地磁盘pv 云原生 云原生 k8s 使用Sealos一键安装K8S 使用Sealos一键安装K8S 云原生 云原生 k8s JDK调优命令行工具 jps查看java进程的工具 参数 说明 -q 只输出进程ID -m 输出传递给Java进程(主函数)的参数 -l 输出主函数的完整路径 -v 显示传递给Java虚拟的参数 jstat查看Java程序运⾏时相关信 JVM jvm JIT编译器优化 虚拟机针对JIT编译器做了很多优化,其中有几项比较重要且有代表性的优化措施 公共子表达式消除公共子表达式消除就是对一个表达式中重复计算的子表达式进行缓存替换。 例如一个表达式: int d = (c * b) * 12 + a + (a + JVM jvm 解释器与编译器 方法执行过程Java中方法的执行由解释器解释执行,所谓解释执行就是针对方法的字节码逐行解释,逐行执行。 解释器进行解释执行虽然比较快,但热点代码没必要每次都重复解释,因此即时编译器将热点代码编译成机器码做个缓存,速度可以大大提升。 比如有一 JVM jvm 对象创建与内存分配 对象创建过程当我们执行以下代码时: Apple apple = new Apple(); 大致经过三个步骤: 堆内存中为Apple对象开辟一块空间 初始化对象(成员变量赋值等) apple变量指向堆内存中的Apple对象的地址 其中第 JVM jvm 常量池与String.intern()方法 常量池其实是一个统称,具体可以分为: class文件常量池,参考精通JVM(一):class文件详解 运行时常量池 字符串常量池 运行时常量池JDK1.7版本开始运行时常量池从方法区迁移到了堆中。 要了解运行时常量池,首先得从class JVM jvm 运行时数据区 概述这部分是JVM中最为重要的部分。我们研究JVM主要的目的就是为了对JVM进行调优,本质上就是针对运行时数据区进行调优。 所谓运行时数据区,其实就是JVM对内存的使用 运行时数据区大致分为: 线程共享区域 方法区 堆 线程独享区域 JVM jvm 类加载器与双亲委派机制 类加载器分类类加载器主要有以下几种: 类加载器 加载范围 启动类加载器(Bootstrap ClassLoader) 1. 加载%JAVA_HOME%/lib下的jar包2. _Xbootclasspath参数指定路径的jar( JVM jvm 类加载机制 类什么时候加载?当虚拟机启动时,会先加载main方法所在的主类 除此之外,以下几种情况将触发类加载: 调用类的静态方法 new对象 使用反射实例化对象 简单来说,就是需要用到类时就加载类 加载一个类时,如果其父类尚未加载,则会先加载父类 JVM jvm class文件详解 class文件结构使用sublime text等可以查看16进制文件的工具,打开任意一个.class文件,可以看到如下内容: 其中大部分内容都是看不懂的,唯一能看懂的就是最开始的8个字母cafe babe,这个叫做“魔数”。 魔数是用来标 JVM jvm Kafka安装 单机部署安装JDK安装kafka依赖jdk和zookeeper,jdk的安装自行百度,如果是ubuntu,可以直接使用: sudo apt-get install -y openjdk-8-jdk 安装成功后可以使用java -versi kafka详解 kafka AOP的原理与实现 AOP基本原理在上一篇文章Bean的创建与循环依赖的最后,提到了一个BeanPostProcessor,它的其中一个实现类是AbstractAutoProxyCreator,AOP就是通过这个后置处理器来实现的 当有循环依赖时,通过三级缓存 Spring5源码解析 Spring Bean的创建与循环依赖 Bean创建过程Bean的创建过程是从beanFactory的getBean方法开始的。以单例bean为例,当从单例池中获取不到bean时,会调用createBean进行创建。 先看AbstractBeanFactory.doGetBean Spring5源码解析 Spring Spring容器创建过程 Spring启动入口用多了SpringBoot,也许很多人已经忘了如何手动启动一个Spring容器,以下是一个最简单的启动方法: public class Application { public static void main(St Spring5源码解析 Spring 纵览全局-Bean的生命周期 Bean从生到死阅读开源框架源码,最忌讳一开始就陷入到代码细节中。 比较推荐的做法是,先了解整个框架的大致结构,主线的主要流程,然后再从源码中找到对应的执行路线,相互验证。 Spring中最核心的就是IOC容器,而主线路就是Bean从定义到 Spring5源码解析 Spring 编译Spring5源码 先将Spring源码克隆到本地: git clone https://github.com/spring-projects/spring-framework.git 选择一个最近的release版本: cd spring-framewo Spring5源码解析 Spring B树与B+树 B树B树也叫B-树,与二叉树相比,B树其实就是多叉树。 二叉树上,每个节点中只有1个元素,2个子节点,而一棵N阶的B树中,每个节点最多N-1个元素,N个子节点,且B树每条路径的高度是一样的,最底层的节点称之为叶子节点 如下图就是一个4阶的B 数据结构与算法 B树与B+树 数据结构