00:00
哈喽,大家好,我是范,今天给大家啊分享一下。通用的词话框架啊,破二它的一些基础的用法。呃,首先呢,呃,我们,呃,再看一下那个。它的文件吧,就是用的是这个啊,阿帕奇的啊common commons的PRO2,我用的是2.4.2啊这个呃,据我使用的情况来说啊,二的版本来说,应该是API差异不大。这个。啊,大家在学习相关呃框架或者说是工具的时候,呃,最好还是留意一下这个版本的问题,今天就碰到一个。版本的坑。好,我们回到正题。
01:00
啊,按照我们之前写文章的时候提到过的三个思路啊,首先我们得需要有一个。可以被磁化的对象啊,这里我们就用。啊代替啊,这个是模板,把模板去掉。然后把这些删掉啊,这就是一个内部的静态类,OK啊,这是一个静态类,然后其次呢,呃,我们需要一个策划的工厂。啊,这里我先给大家演示一个基础的。啊,就不用那个。
02:05
然后我们实现一下,它这里面提示有三个方法,一个是create,一个是。呃,P还有一个destroy线。啊创建呢,我们就直接创建一个翻开这就可以了。OK,然后提示。其实里面有两个,这就是。他的一个。呃,不一样的地方吧。啊,然后这里。我们再看一下Joy,因为Joy这个地方,它其实对于我们现在创建的这个对象来说,它不是很重要。因为它没有其他资源要释放啊,这里提到就是说这里其实gra它对这个private的修饰符它是起作用的,就在grade里面。
03:02
啊,它会有呃权限的一个识别,但是我们在实际写代码的时候,它是无所谓的,可以直接去访问。那个当前包的一个private的。啊,属性或者说一个类的,像这种静态类似的。OK啊,这里面我们看一下它的源码,它的里面会有一个。呃,泛型只带了一下可磁化。对象的一个类型啊,在格瑞里面它是可以不写的,但是这里面我建议写上,因为呃,我们还挑第二个啊,因为如果不写的话,后面呃。编译器格插件,它没办法推导那个具体的对象类型。啊,比如说这里。啊和这里啊还有。啊,没了,这就是。不写的一个坏处。其实不写也是可以,但是object它传完之后我们就没办法去。
04:02
嗯,完成调用那个翻猜字的其他方法对我们编写还有。就是做处理会有一些障呃障碍,那我们就用酸下去。这个。然后这里面。就是。呃,比较基础的,这里面如果是呃。我看一下啊,这里面如果是大家想对。在那我们设置一个空吧,啊,如果是要回收一些资源,这里面这几个地方就是回收资源的。啊,这三个方法创建啊包装还有呃,回收资源,然后这里面就是。那个。一个石化工厂。嗯,我之前是想做通过也对bay进行一个泛型的处理,然后去呃,写一个通用的磁化工厂的抽象类的,后来觉得不是太合适,也。
05:09
就是兼容起来会比较麻烦,而且这里面嗯,我们的策划的对象不会说我写个脚本就要创建一个对象词,写个脚本就会创建一个对象词,一般就是。嗯。对于一个项目来说,就是整个框架里面或整个项目里面,一共就有几类可能就是。三五类。这种需要我们自己去实现的对象词大概就是这样。嗯,然后我们还需要一个,第二步已经是完事了,策划工程我们写完了,然后我们就第三步,就是还需要一个。Be。那个真正的对象词,嗯,这里面呢,我就把这个。Protest当做一个对象。词的那个累了,然后。我们看怎么去创建对象池。
06:00
嗯,我们写一个方法吧。啊,首先我们需要一些对象池的配置。哎,不是这个。这个。好。啊,也不是,待会我们看一下先创建一个对象。这里面我们看,其实他也是有一个泛型的啊,这里面我们就写上吧,因为。他需要验证是跟那个factory是一样的验证方法,我们看一下这里面它有一个对象。啊,是这个这。
07:01
我们在我们通常忘记他的名字叫什么的时候就查源码。我们需要传一个键。然后我们回到啊。回到我们这个地方,Factory的话。呃。我们直接new这个就可以。OK,然后在这里面它有可能会提示。呃,这样他有一个新的一个构造方法啊,这里面就会你一个这样的一个。相当于默认的一个参数吧,然后我们把这个默认参数提出来之后。嗯,这里面其实还是可以去创。做这种测试的APP,这种设置的。Set。啊,最大空闲的量。啊,这是这个最小风险的量,然后再设置一个呃,Next wait这个人。
08:05
啊,这个我们看第二个和第三个其实应该是一样的,然后但是它那个呃,传的类型不一样。啊,这个。啊,我们那个。直接设置那个秒就行。但是他这里面写的已经是过期了。嗯,他是用的也是这个weight,然后during,呃,没有这个,把这个我们传的这个long类型的数值转换成一个第二的对象,然后再。还是调用这个C,这他其实应该是嗯,啊,这个没有过期,应该是鼓励别人的吧,鼓励使用这个方法啊,我们就不管它了,还有一些,我记得还有一个set max。Total啊,就最多创建几个对象。
09:00
啊,其实我们后面呃,还有一个设置的就是别的县城过来去县城池里面拿这个县城呃拿对象的时候,他的一个最大的阻塞等待时间啊,这里面跟那个队列和很相似的,其实这个呃这个词词话技术的common这个词里面的。呃,它的,呃,底层的对象去存放的一个类型就是一个do啊,应该是呃,Lincoln的blocket do啊这里面就不给大家展示了,那这个就先取消吧,然后每个对象再去拿的时候,每个线程再去线程对象池里面取对象的时候也会有一个参数设置。呃,这个参数设置就是阻塞的最大时间这样。然后。啊,我们就把这个出去,然后。OK,然后这就是我们的一个那个对象词的类已经做好了啊,一般的话我们会在这里面去写一个。
10:19
OK,然后我们用的话就这么用的,嗯,我们先让这个引力破,等一引力的,然后再用get。啊。然后我们这里去拿到一个之后,嗯,写一下。我们看这个格位插件会推断出来这个呃,F的类型就是啊,我们再去看这个。A s name。
11:01
这样OK,嗯,设置成三,大概就这样,然后如果我们想归还的话,就是return。然后我们这个其实还是有一点点差别的,然后这里面这个对方法是很难调用的,调用的到的,在我这个测试里面,因为呃,我们测试的就是最大的空闲,最小的空闲。呃,还有一个,呃,最大值200,然后正常来说,跟我们在讲Java线程池里面那个概念是类似的,就是说。呃,最大空闲是十个。最小空闲是两个,呃,超过最大空闲,他就会不断的把对象回收掉啊,回收的时候用的就是这个方法。然后就是我们,呃,整个就是。
12:00
比较基础的一个对象词的一个使用方法啊,大概就是这样。呃,然后呃,剩下的一点点时间啊,再去给大家演示另外一个对象词的一个使用方式吧,就是选二。就是K的。呃,这个时候其实他我们看一下它的源码。它其实也是一个K和T啊,K的话就是指的键值啊,我们这里用本吧。OK。然后。哦,不对,这应该是,呃。写错了,应该写在这儿。
13:07
然后这个factory其实是已经不再实用了,然后但是它是不会报错的,所以我们还得再写一个。K。嗯,也是可。啊,我们还用这个对象。用错了。用这个,然后。啊,这是一个接口。宝宝看一下刚刚怎么跳过去。
14:06
诶不对,我们看一下这个。这个应该是跟他同级的一个地方。应该是busy kid。名字可能写错了。然后我们去创建这个方法,然后创建方法的话,嗯,我们这样在这个刚才字里面写一个in特A。然后。还得再看一下到底是不是。现在这个。
15:02
然后这个也是你有得报过去。我们看这个其实是它是没有那个K的,它就是一个,呃,在整个它里面那个队列里面存的那个对象啊,这里面只是对象和这个相当于这个包装之后的对象和我们需要策划的对象的一个关系,然后这里面的话,嗯。我们可能就是需还是要get。然后点呃,Set,假如说我们set name就是。清空它的一些相互相应的资源。然后大概就这样这样一个factor就写好了,然后我们就可以用这个key factory去创建这个。啊,这个config刚才没用上。
16:03
啊是这嗯,这第二种就是我们创建以K有一个K的啊,就是创建不同的对象词,比如说这有呃三个K,就相当于创建三个反态磁导的一个对象值,而且这三个对象值相互之间是不干的。也就是说我们呃,通过这种方式,我可以通过一个呃池子,就是磁化对象的类,去完成不同类型的对象的磁化这个功能。但是我看官方里面其实不太推荐这种。嗯,就是说。嗯,我看它的一个,它的底层实现是这个linkninn block deal,然后它里面用的那个K的,呃,嗯,我看一下。这里面有一个破点。
17:00
然后这里面就会要传一个K,然后我们这里面去传的话。K,这里我记得这里面有一个。哦,他应该就在这里,然后他说这个是复合的一个。呃,相当于用一个哈希麦客人的哈希麦去。呃,处理了这种K和相对应的对象词的那个队列的一个关系啊,所以这里面如果。就是borrow和back的return object的频率太高的话,会存在一个性能的瓶颈啊,这里呢,嗯,我还没有测试,等我测试了之后再说吧,反正是。不是太建议使用这种呃K的po。然后呃,再分享一下最近呃对于这个策划技术的一个使用心得吧,就是之前嗯觉得应该是在HTTP测试的时候,可以把HTTP快的这个对象诶给磁化,应该能减少不少内存的使用,但是经过我自己的尝试之后,发现其实没什么卵用。
18:10
啊,在QS2万的时候,呃,对象创建对象是少了啊,但是GC并没有明显的减少,然后呃,Request的对象占用的内存是少了,但是也就少了一兆多一点。大概是这个样子,OK。啊,今天的分享就到这里啊,我们下期再见,后面我会对他进行做。呃,各个词的类型进行一个性能的测试。
我来说两句