包含标签 java 的文章

一文读懂Back Pressure

最近经常看到back-pressure这个词,所些想要深入了解一下,以下是学习的一点心得。

什么是back-pressure

back-pressure这个词是来源于工程概念,当气流或液体在管道中运输时,由于管道变细或者受到其他阻碍,导致出现了下游向上游的逆向压力,这种情况就称为back pressure,也称作向后的压力。

在计算机行业,back pressure 通常用来描述当数据在传输中由于下层的buffer满了,导致上层服务无法继续接收数据的现象。

……

阅读全文

添加一行日志还要重启服务器?

在工作中我们经常会遇到以下问题:

  • 有个方法的入参没有打印,不知道用户输入了什么
  • 有个错误日志没有打印堆栈,只是打印了error.getMessage(),不知道上下文
  • 某个接口响应时间很慢,不知道哪一步有问题
  • 不知道是在哪一步创建了很大的ArrayList,或都HashMap

等等这一系列的问题,如果你没有遇到过这样的问题,停下来想一想要如何解决呢?
如果你遇到过这样的现象,那么你又是如何解决的呢?加日志然后重启服务器吗?

本文就是要介绍一个神器让你不用重启服务器就可以解决以上问题,它就是Btrace,以下是一个简单的demo,我们一起来看下Btrace的强大功能。

……

阅读全文

Javassist入门之其他特性

泛型

Javassist 的低级别 API 完全支持 Java 5 引入的泛型。但是,高级别的API(如CtClass)不直接支持泛型。

Java 的泛型是通过擦除技术实现。 编译后,所有类型参数都将被删除。 例如,假设您的源代码声明一个参数化类型 Vector

……

阅读全文

Javassist入门之字节码接口

Javassist 还提供了用于直接编辑类文件的低级级 API。 使用此 API之前,你需要详细了解Java 字节码和类文件格式,因为它允许你对类文件进行任意修改。

如果你只想生成一个简单的类文件,使用javassist.bytecode.ClassFileWriter就足够了。 它比javassist.bytecode.ClassFile更快而且更小。

……

阅读全文

Javassist入门之类加载器

如果提前知道哪些类必须修改,那么修改类的最简单的方法如下:

  1. 通过调用ClassPool.get()获取一个CtClass对象,
  2. 修改它
  3. 在该CtClass对象上调用writeFile()或toBytecode()来获取修改的类文件。

如果在加载时才能确定一个类是否被修改,用户必须使Javassist与类加载器协作。Javassist可以与类加载器一起使用,以便在加载时可以修改字节码。 Javassist的用户可以定义自己的类加载器版本,但也可以使用Javassist提供的类加载器。

……

阅读全文

Javassist入门之自我检查和定制

CtClass提供了自我检查的方法。Javassist的自我检查的能力与Java反射API兼容。CtClass提供了getName(),getSuperclass(),getMethods()等等。CtClass还提供了修改类定义的方法。它允许添加一个新的字段,构造函数和方法。构造方法体也是可能的。

方法由CtMethod对象表示。CtMethod提供了几种修改方法定义的方法。请注意,如果方法是从超类继承的,那么表示继承方法的相同CtMethod对象代表在该超级类中声明的方法。CtMethod对象对应于每个方法声明。

……

阅读全文

Javassist入门之读写字节码

Javassist是处理Java字节码的类库,Java字节码存储在称为class文件的二进制文件中,每个class文件都包含一个Java类或接口。
类Javassist.CtClass是class文件的抽象表示,一个CtClass(编译时类)对象是处理class文件的句柄。以下程序是一个非常简单的例子:

……

阅读全文

泛型

泛型

泛型是类型参数化的泛型类或接口。下面将修改Box类来演示这个概念。

……

阅读全文

监视器 - Java同步的基本思想

如果您在大学时进行了操作系统课程,您可能会记得,监视器是操作系统中同步的重要概念。它也用于Java同步。这个帖子用类比来解释“监视”的基本思想。

……

阅读全文