Java
文章平均质量分 85
jy02268879
这个作者很懒,什么都没留下…
展开
-
【转】深入理解Instrument
转自:https://www.throwable.club/2019/06/29/java-understand-instrument-first/前提很早之前就了解到目前主流的APM开源框架如Pinpoint、SkyWalking等等都是通过java.lang.instrument包提供的字节码增强功能来实现的。趁着对这块的热情还没消退,抽时间分析一下java.lang.instrument包的使用方式,记录下来写成一个系列的文章。本系列博文针对的是JDK11,其他版本的JDK可能不适合。转载 2020-10-21 20:15:12 · 1555 阅读 · 0 评论 -
Java动态生成字节码之Javassit
作者:rickiyang出处:https://www.cnblogs.com/rickiyang/p/11336268.htmljavassist使用全解析Java 字节码以二进制的形式存储在 .class 文件中,每一个 .class 文件包含一个 Java 类或接口。Javaassist 就是一个用来 处理 Java 字节码的类库。它可以在一个已经编译好的类中添加新的方法,或者是修改已有的方法,并且不需要对字节码方面有深入的了解。同时也可以去生成一个新的类对象,通过完全手动的方式。一、.原创 2020-10-21 20:14:33 · 1354 阅读 · 0 评论 -
【转】SPI服务加载机制注册驱动原理分析、线程上下文类加载器、违反双亲委派模型
转自:双亲委派模型与线程上下文类加载器https://blog.csdn.net/justloveyou_/article/details/72231425摘要:SPI机制是什么,有哪些应用场景,又带来了哪些问题? 双亲委派模型是Java推荐的类加载模型,但违背该模型的案例有哪些?为什么会违背,又是怎么解决这种case的? JDBC驱动加载的案例有哪些,SPI机制为它带来了哪些方便? 线程上下文类加载器的作用与应用场景?一、引子SPI机制简介SPI的全名为Service Prov转载 2020-10-11 15:48:43 · 694 阅读 · 0 评论 -
Java之jmap命令内存详情
一、简介jmap命令是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。64位机上使用需要使用如下方式:jmap -J-d64 -heap pid命令格式 jmap [option] <pid> (to connect to running process) 连接到正在运行的进程 jmap [option]原创 2020-09-20 14:06:17 · 1013 阅读 · 0 评论 -
Java之jstat命令内存统计
命令的格式如下:jstat [-option] [vmid] [间隔时间/毫秒] [查询次数]常见的option有:l class (类加载器) l compiler (JIT) l gc (GC堆状态) l gccapacity (各区大小) l gccause (最近一次GC统计和原因) l gcnew (新区统计) l gcnewcapacity (新区大小) l gcold (老区统计) l gcoldcapacity (老区大小) l...原创 2020-09-20 14:05:10 · 1149 阅读 · 0 评论 -
CPU飙高、内存飙高、频繁FULLGC、程序越来越慢的排查思路(top jstack jstat jmap)
个人思路,出现CPU飙高、内存飙高、频繁FULLGC、程序越来越慢的问题,先dump线程、内存日志。一、dump的方式1.用jstack和jstate(1)top首先使用top命令查看当前系统哪个进程占用的CPU/内存最高可以用shift+P根据CPU使用率排序shift+m根据内存占用排序得到该有问题的进程ID,也就是上述操作中显示的PID。比如PID=11225top命令详解在另外一篇博客中有写(2)top -Hp 11225查看该进程内哪个线程的CPU/内存原创 2020-09-20 14:06:32 · 2789 阅读 · 0 评论 -
【二十】二叉树特性与遍历、树与二叉树的转换,树的遍历
一、二叉树的特性性质1若规定根节点的层次为0,则一棵非空二叉树的第 i 层上最多有(i >= 0)个结点性质2若规定空二叉树树的深度为-1(即根结点的深度为0),则深度为k的二叉树的最大结点数是(k>=-1)个性质3具有n个结点的完全二叉树的深度k为不超过lb(n+1)-1的最大整数性质4对于一颗非空的二叉树,如果叶结点个数为,度为2的结点树为,则有=+1性质5对于具有n个结点的完全二叉树,如果按照从上至下和从左至右的顺序对所有结点从0开始顺序编号...原创 2020-08-25 19:56:07 · 1027 阅读 · 0 评论 -
【十九】七类查找算法总结笔记
1.顺序查找2. 二分查找(折半查找)3. 插值查找4. 斐波那契查找5. 树表查找5.1 最简单的树表查找算法——二叉树查找算法。5.2 平衡查找树之2-3查找树(2-3 Tree)5.3 平衡查找树之红黑树(Red-Black Tree)5.4 B树和B+树(B Tree/B+ Tree)6. 分块查找7. 哈希查找...原创 2020-08-25 18:26:39 · 928 阅读 · 1 评论 -
【十八】常见十种排序算法总结笔记
https://www.cnblogs.com/onepixel/articles/7674659.html一、排序算法简介1.1分类排序算法分为1.比较类排序插入排序 选择排序 交换排序 归并排序2.非比较类排序基数排序1.2 算法复杂度稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a=b,排序之后...原创 2020-08-03 19:44:09 · 2611 阅读 · 15 评论 -
【十四】Java集合之ConcurrentHashMap源码分析(1.8)
一、简介java8中ConcurrentHashMap的结构是:数组+链表+红黑树。因为在hash冲突严重的情况下,链表的查询效率是O(n),所以jdk8中改成了单个链表的个数大于8时,数组长度小于64就扩容,数组长度大于等于64,则链表会转换为红黑树,这样以空间换时间,查询效率会变为O(nlogn)。红黑树在Node数组内部存储的不是一个TreeNode对象,而是一个TreeBin对...原创 2019-03-18 00:02:23 · 2616 阅读 · 4 评论 -
【十三】Java集合总结Queue
一、简介Queue接口继承了CollectionQueue即队列,一般都是FIFO先进先出,优先级队列和 LIFO 队列(或堆栈)例外不允许插入null值JDK中并发队列提供了几种队列实现继承自Queue:1.并发队列ConcurrentLinkedQueue(类)2.阻塞队列BlockingQueue(接口,有7种阻塞队列实现自这个接口)3.双端队列(Deque)...原创 2020-04-13 15:12:36 · 123 阅读 · 0 评论 -
【十七】JVM内存分配、垃圾回收算法、垃圾回收器(1.7)
本篇是对《深入理解Java虚拟机----JVM高级特性与最佳实践》周志明作的第二版对应内容的一个读书笔记。先贴上JVM运行时数据区的图其中:程序计数器、虚拟机栈、本地方法栈这3个区域,都是随线程而生,随线程而死。不需要过多的考虑垃圾回收的问题。垃圾回收需要考虑的是:1.方法区 2.堆一、内存分配与回收1.1 方法区属于永久代 perm generation主要回收2...原创 2019-04-07 18:00:00 · 1298 阅读 · 0 评论 -
【一】Java集合总结Collection接口(List、set、map)
List有序、可重复。1.ArrayList是用数组实现的(顺序表),查询速度快,但是在中间添加/删除元素慢,会导致数据移位。线程不安全。ArrayList有2个构造函数,一个是默认无参的,一个是传入数组大小的。在JavaEffect书中明确提到,如果预先能知道或者估计所需数据项个数的,需要传入initialCapacity。因为如果使用无参的构造函数,会首先把E...原创 2018-08-14 18:16:25 · 601 阅读 · 1 评论 -
【九】Java 反射
Java 反射机制在程序运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种 动态的获取信息 以及 动态调用对象的方法 的功能称为 java 的反射机制。Java 反射机制可以动态地创建对象并调用其属性。反射的核心是 JVM 在运行时才动态加载类或调用方法/访问属性。Java 反射主要提供以下功能:在运行时判断任意一...原创 2018-11-19 20:24:15 · 178 阅读 · 0 评论 -
【十】Java 回调函数(封装Jedis的例子)
回调函数:就是客户程序C调用服务程序S中的某个方法a,然后S又在某个时候反过来调用C中的某个方法b,对于C来说,这个b便叫做回调函数。例子说明,比如封装jedis的时候,一共有几十个操作方法,每个都去获取资源、释放资源。而获取资源和释放资源的代码部分是重复的,只有实际的操作redis部分不重复。没使用回调函数的话是这样:package com.sid.util.callback;...原创 2018-11-20 10:02:36 · 858 阅读 · 0 评论 -
【十一】Java 四种引用总结(强、软、弱、虚)
简介JVM会在必要时启动垃圾回收,为了方便我们控制对象的生命周期,从JDK1.2(记错了给我说)开始有四种引用类型,强引用>软引用>弱引用>虚引用。引用在栈内存中,真实的对象在堆内存中。栈内存中的东西是某线程独享。堆内存中的东西是可所有线程共享的。一、强引用(StrongReference)一个对象只要有强引用存在,Java GC就不会回收它,无论内存...原创 2018-11-26 17:02:38 · 359 阅读 · 0 评论 -
【十二】数据结构之树、二叉树、二叉查找树、平衡二叉查找树AVL、红黑树、B树、B+树简介
树二叉树二叉查找树平衡二叉树红黑树B树原创 2019-03-18 00:03:27 · 1944 阅读 · 1 评论 -
【十五】JVM类加载、双亲委派模型简述笔记
本篇是对《深入理解Java虚拟机----JVM高级特性与最佳实践》周志明作的第二版对应内容的一个读书笔记。一、什么是虚拟机类加载JVM虚拟机类的加载机制是说:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。类加载说的就是下图中的:加载+验证+准备+解析+初始化,这5个阶段。简而言之一句话:Class文件...原创 2019-04-06 00:07:49 · 215 阅读 · 0 评论 -
【十六】JVM虚拟机运行时数据区、虚拟机监控工具
本篇是对《深入理解Java虚拟机----JVM高级特性与最佳实践》周志明作的第二版对应内容的一个读书笔记。一、JVM运行时数据区名字 线程共享/私有 存的什么 可能会报什么异常 程序计数器 线程私有 如果正在执行java方法,存的字节码指令的地址 如果正在执行native方法,程序计数器为空。 虚拟机规范中未规定 J...原创 2019-04-06 23:26:53 · 310 阅读 · 0 评论 -
【二十二】Java多线程之线程转储和分析(jstack详解、以死锁例子分析jstack dump下来的线程文件)
示例:用ReentrantLock写一个死锁,thread-1获取lockA后,等待lockB,thread-2获取lockB后,等待lockA。测试代码package com.sid;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * @pr...原创 2019-01-16 13:12:49 · 1126 阅读 · 0 评论 -
下载JDK及Linux安装
环境:ubuntu16.04 且以root用户登录1. 在官网下载JDK安装包(这里用的java8)http://www.oracle.com/technetwork/java/javase/downloads/index.html2. 在终端创建执行创建路径mkdir /app/java3. 进入该路径cd /app/java4. 输入rz上传安装...原创 2018-03-19 15:55:48 · 519 阅读 · 0 评论