java实现性能优化常用的java代码片段分享(一)
优采云 发布时间: 2021-08-05 19:01java实现性能优化常用的java代码片段分享(一)
文章采集链接:java实现性能优化常用的java代码片段分享一些企业里经常采用的性能优化代码片段,实际开发中是非常有必要去规范。前段时间看到一篇不错的关于设计模式的文章,其中一个核心就是注意常量。这些常量我们是无法真正接触到的,所以很多细节是不必要去注意的。但是,注意这些东西有利于我们学习企业级的开发。
企业级开发一般都是比较简单,模块化的,你没办法随时随地调整所有的模块和功能。所以,我在这里给大家整理了一些经常出现在开发中的性能优化细节。上一篇主要讲的是spring的回调池,这一篇将会探讨线程池问题。主要采取线程池的目的是提高代码的效率,尤其是在长期的离线开发中,提高代码的效率和可读性也是比较有必要的。
常量计数器常量是非常常见的一种类型,计数器被保存在内存中,但是每次从内存中提取某个值的时候,是有规律的,并且规律性的和提取的数量一定要是相同的。通常来说,会使用同步的方式去实现这一点。但是这并不是绝对的,我们可以尝试避免同步去实现,但是并不保证百分百的避免了同步问题。作为调度器,我们是可以控制提取数量的时候尽量的好,但是要是有大量的值是提取到同一个线程内。
对于一般的情况,其实不影响性能。不影响性能的情况下,我们就用不同的线程池去处理这一问题。不同线程池处理不同数量的值的效率是比较高的。当然,如果我们要实现高效的线程池,我们可以设置特定的隔离度。但是,这就可能提高了性能,同时还牺牲了其他功能。我的建议是,我们尽量不要使用同步,尽量用共享的对象和变量来替换回调池中的回调方法。
在java中,需要不同线程池处理的值是不一样的,共享变量也是相同的。不同线程池提取同一个值的方式一样,如果我们对这个值进行了重写,会降低很多性能。我建议使用java内置的threadlocal来进行存储,如果没有特定的线程池,我们可以使用使用randominitialrange的值。atomicinteger的atomiclynovation机制将会替换这一数值。
线程池问题线程池由于是内置的,我们将无法通过我们的方式去修改线程池的性能。于是我们会采用java标准库中的threadpoolexecutor或者java的runnable代替内置的threadpoolexecutor。每个线程池都会进行一些优化,在这里,我们主要谈谈内置的threadpoolexecutor和java内置的runnable。
内置的threadpoolexecutor在执行的时候,由于他是java提供的,会直接调用java的类去执行,但是java提供的类去执行的时候,会使用内置的线程池,这意味着我们必须也去加入优化。这个问题需要用同步实现的线程池,我。