关于JVM的优化01(CPU篇)
关于JVM的优化,诗东本人理解是用最少的资源做更多的活,换句话来说就是资源的优化,对JVM调优这东西的理解,无论对我们真正需要动到JVM进行调优时候,还是我们平时的开发都有指导性意义。
下面通过不同的场景来演示一些JVM优化方面的内容。
某一天领导叫我在系统中添加一个定时发推送到用户手机的功能,对于自己现在用的系统,我知道已经有了发推送的功能,但是怎么用定时功能呢?
方案一
本系统中有集成了redis数据库,其实我可以这么做,写一个死循环,不断地访问redis,然后根据redis数据库返回的时间值,到时间就做相应操作,那么就实现了所谓的定时。
就是这里多个时间判断而已。
方案二
集合现成的框架,如Quartz,配置好Quartz要执行的时间和内容。让其到时间就开始执行相应的操作。
这两种方案都可以达到我想要的目的,如果你对公司和你的领导不爽,领导又不会写代码,只要见到达到目的就可以(能交差),其实我可以选择较为简单的实现方式。这两种方案我都在JVM优化的角度对比过,发现法案二优于方案一,只是实现起来相对麻烦点,因为写条线程,然后进行死循环这类操作,我根本不用上网找资料,下面演示一下对比过程。
首先打开本地的jvisualvm(我在本地测试)。
先进行方案一死循环的测试
上面的图片,一个是讲CPU的,一个是讲内存的。显然,首先从CPU的使用角度去分析,死循环消耗的CPU资源是12%左右,就是你开一条线程,不断进行死循环操作,要消耗12%的CPU资源。右图是内存的消耗,就是最多25MB左右内存消耗,才能维持这条线程
现在进行方案二测试
这里面意思是上图时间会执行myJob2这个操作。
这里有了很清晰的对比,内存使用情况差不多,但是CPU使用情况完全将方案一吊起来打。
想要实现同样的功能,一个CPU使用达到12%,一个CPU使用只有0.1%。这里好像同样的工种,建国初期和现在工资的对比这样的差别。
下一期我会说一下关于GC日志方面,怎么指导我们进行在程序开发方面的引导作用,敬请期待!如果你觉得文章有硬货,就登陆www.nedsoft.cn 进行继续阅读吧!