java优化更

白色玫瑰 程序猿

时间: 2023-05-22 阅读: 1 字数:1944

{}
以前面试的时候,总被面试官问及性能调优的问题,今天按我的理解总结一下。 \r\n性能调优牵扯的地方很多,具体要根据实际项目应用入手,大体上分下面几个方向:\r\n\n硬件  硬件扩容,投入很多 \r\n软件    \r\n\n\njava\r\n\n\r\njava调优一般是指参数调优,代码方面尽量用工厂模式,特别对于一些大的对象,gc回收会很耗时间,这点effective  \r\njava里讲了很多。多使用jdk自带的工具类,多...

以前面试的时候,总被面试官问及性能调优的问题,今天按我的理解总结一下。

性能调优牵扯的地方很多,具体要根据实际项目应用入手,大体上分下面几个方向:

硬件 硬件扩容,投入很多 软件

java

java调优一般是指参数调优,代码方面尽量用工厂模式,特别对于一些大的对象,gc回收会很耗时间,这点effective java里讲了很多。多使用jdk自带的工具类,多线程方面可以考虑util下面的concurrent集合包。GC回收一般是回收堆里的数据,堆分 new区,old区,静态方法区,对于频繁生成对象的项目可以把new区设置的大一些,对对象变化不大,设置old区大一些。垃圾回收方式分串行,并行, 并发,要根据项目紧急程序选择。最后还要分析gc回收日志,可以利用jdk自带的工具,像jstack.jmap,jconsole等,还可以使用 jprofiler,这个很强大,不过是收费的。

  1. 中间件 多使用中间件提供的特性 如:安全机制,事物机制,消息机制等,中间件对分布式提供了很好的支持,通过中间件配置线程池以及数据库连接池,由容器来管理实例,可以减少开启以及关闭的开销。
  2. 数据库

大表尽量少关联,提前对表analysis,分表分区,大表要建索引,查询数据尽量走索引,减少full table 的查询,对于必须要进行的大表关联,可以提前一天生成view 。定期对索引重建 。

架构方面一般是:

DNS IP段分发:有效的分发请求。

LP:软件负载通过现有的工具取余或者轮询等,硬件F5负载,听说新浪是通过这个实现的。

动静分离:配合apache静态文件搞笑支持,可以让中间件更好的的处理动态内容。

读写分离:配合缓存能加大关键字命中率 。

水平分库:表数据过多可以根据关键字分区。

垂直分库:有些数据不是很长用,但是占用的字节又很多,可以分割一下,等使用的时候再关联,这样可以减少查询时间,看过robbin的文章,iteye也经历过这个过程。

分布式存储:业务分离,跨平台,更好的利用外部资源。

缓存:能够大幅度降低DB IO的次数。

缓存一般分:

页面缓存:多存储一些图片 js css等静态的东西

服务器缓存:自定义比较多,使用一些现有的集合框架,像MAP List等等存储在session中

数据库缓存:oracle等自带

专用缓存: memcache,OSCache等

专用缓存位于服务器与数据库之间,如memcache,它是单线程,根据字节长度把内存划分为不同的段,这样虽然会降低内存利用率。但是会很高的提高数据命中率,查询复杂度为O(1).

原文地址:https://blog.csdn.net/iteye_14310/article/details/82087657?ops_request_misc=&request_id=&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2~all~koosearch~default-18-82087657-null-null.142^v87^koosearch_v1,239^v2^insert_chatgpt&utm_term=java%E4%BC%98%E5%8C%96

本文章网址:https://www.sjxi.cn/detil/4f225baedb5946ddb8f32b2e72efdd27

最新评论

当前未登陆哦
登陆后才可评论哦

湘ICP备2021009447号