线程池BlockingQueue排队策略

排队有三种通用策略 1、直接提交。无缓冲等待队列SynchronousQueue,它将任务直接提交给线程而不保持它们。在此,如果不存在可用于立即运行任务的线程,则试图把任务加入队列将失败,因此会构造一个新的线程。此策略可以避免在处理可能具有内部依赖性的请求集合时出现锁定。直接提交通常要求无界 maximumPoolSizes 以避免拒绝新提交的任务。当命令以超过队列所能处理的平均数连续到达时,此策略允许无界线程具有增长的可能性。 2、无界队列。使用无界队列(例如,不具有预定义容量的 L ...

Btrace 插桩前后的类变换分析

btrace 插桩过程 btrace-client通过attach api附加到远程的目标进程上,建立socket通信连接,然后Btrace-client编译 btrace script脚本并验证,将编译好的class,通过socket传递到目标进程,btrace-agent对其class类变换, 对监测的类进行代码插桩,监测函数的信息,通过socket返回给btrace-client,显示监测的信息。 testSubCharles2函数插桩前 1. 插桩前的co ...

Btrace扩展小工具

背景 在不能调试的情况下,需要定位问题,比较难,排除问题费时费力。 1、 编写写btrace脚本,实现对数据的监控,但是脚本调试起来需要时间 2、 对于没有重写toString方法的复杂的对象,不能够打印出具体的属性值 3、 对于函数返回值,需要找到返回类型所在路径,然后将其添加到btrace脚本编译路径下比较麻烦。 4、 对于没有做异常捕获的程序,没有打印栈信息。 目标 通过命令行交互的方式,实现程序监测。 1、 实现函数和返回参数的打印 2、 将复 ...