改善Hibernate应用程序性能的7种方法

添加字幕文本 Hibernate是将Java Web应用程序与SQL数据库集成的好工具,但是当应用程序的响应时间开始显着增加时,我们应该怎么做? 当我们怀疑应用程序是否会随着客户群的增长而扩展时,我们该怎么办?

在花大价钱托管或重写代码之前,请考虑分析和改进Web应用程序的这7个方面。

#1调整JVM内存设置

JVM允许我们配置它将分配给运行我们的应用程序的内存量。 如果未正确配置内存设置(堆大小,perm gen大小等),则可能是垃圾回收进程运行得过于频繁,这将导致CPU使用率激增并停止执行。

#2优化JDBC数据源和Hibernate的配置

在这些配置中,我们可以定义Hibernate和底层JDBC层的一般行为。 在应用程序此部分中所做的更改(池大小,顺序等)可能会影响每个SQL查询和更新。 因此,正确设置这些设置对于您的应用程序的最佳性能至关重要。 在这里还值得一提的是Hibernate 2级缓存。 当应用程序一遍又一遍运行相同的查询时,缓存最多可以节省99%的数据库往返次数。 市场上有几种可以用作二级缓存提供程序的缓存框架,其中最著名的是EHCache , Oracle Coherence , Infinispan和Hazelcast 。

#3优化休眠映射

无论我们是使用批注还是XML文件来配置Hibernate映射,几行更改(延迟加载,批处理等)都可以大大提高应用程序的性能。 这些映射直接影响Hibernate将生成和执行哪些SQL语句。 在大多数情况下,使用默认映射配置可能效果很好,但是针对关键的SQL查询和更新对其进行优化可能会大大增加与数据库的往返次数以及执行所花费的实际时间。

#4优化Hibernate会话管理

在处理事务时,了解不同的隔离级别和传播类型以及将只读和读写DB操作拆分为单独的事务是关键。

#5添加缺少的数据库索引

有几种方法可以识别最耗费资源的SQL语句,但是一旦有了它们的列表,添加必要的索引就变得很简单。 没有这些索引,数据库可能必须逐行读取整个数据库表。 这是数据库中最耗费资源的操作之一,绝对是我们要避免的事情。

#6改善SQL语句

一些由Hibernate生成的SQL语句可能包含许多不必要的联接操作。 这是确保SQL语句爬网的一种可靠方法。 我们必须确保仅包含绝对必要的联接。 要记住的另一件事是如何组织WHERE条件来过滤结果集。 选择错误的顺序可能会使查询速度降低一个数量级。

#7重构Java代码

代码中最典型的问题之一是N + 1查询问题,我们运行查询以获取项目列表,然后遍历这些项目以对每个项目运行单独的查询。 单独使用这种反模式可以终止大多数扩展应用程序的尝试,并且可能使我们在托管方面付出巨大的代价。 由于其修复需要代码重构 ,因此它是最复杂,最昂贵的性能问题之一。

摘要

当所有尝试似乎都无法解决性能问题时,仍然存在希望。 上述项目可能有助于在主要瓶颈升级为更大的问题之前对其进行识别。 哪些性能问题正在损害您的业务?

翻译自: https://www.javacodegeeks.com/2015/08/7-ways-to-improve-performance-of-a-hibernate-application.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java网络爬虫技术也可以代替Python实现网络新闻分析系统

导读:自从大数据的概念被提出后,互联网数据成为了越来越多的科研单位进行数据挖掘的对象。网络新闻数据占据了互联网数据的半壁江山,相比传统媒体,其具有传播迅速、曝光时间短、含有网民舆论等相关特征,其蕴含的价值也愈来愈大。 利用相关网络爬虫技术与算法,实现网络媒体…

centos 服务器装与python34源码安装

http://www.111cn.net/sys/CentOS/63645.htm 1、CentOS安装Python的依赖包(不安装依赖包,会导致python安装不完整) yum groupinstall "Development tools"yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-…

CSDN:2020博客之星年度总评选大赛,趣味总结!

导读:从2020年正式写博客,第一次参加活动,竟然落选了,在此记录一下这个过程吧,方便找帖子链接,毕竟靠着本人的影响力还是能捞点饭票的,哈哈。 2020博客之星年度总评选活动地址:https…

Java 日期格式

转载于:https://www.cnblogs.com/bylion/p/5141022.html

java获取默认用户目录_Java获取当前路径

1、利用System.getProperty()函数获取当前路径:System.out.println(System.getProperty("user.dir"));//user.dir指定了当前的路径2、使用File提供的函数获取当前路径:File directory new File("");//设定为当前文件夹try{System.o…

zk框架_ZK Web框架思想

zk框架我曾多次被要求提出一些有关ZK的意见。 因此,根据我4年作为ZK用户的经验,有一些想法: 总体开发人员经验,社区和文档 “就是这样” ZK提供的大多数东西都能很好地工作,并且如果您以前开发过任何桌面Java应用程序…

一文教你用java实现出租车计价器设计(附下载源码)

导读:在我国,出租车行业是八十年代初兴起的一项新兴行业,随着出租车的产生,计价器也就应运而生。但当时在全国没有一家企业能够生产,因而那个时期的计价器是由台湾引进。台湾是计价器的主要生产场地,目前全…

写论文的思考

以下引自知乎的回答 需要的能力 1.资料检索的能力 2.资料筛选的能力 3.期刊论文的阅读能力,期刊论文和大学部的课本截然不同。大学部的课本是寻次渐进地从最基本的知识背景逐步交代出整套有系统的知识,中间没有任何的跳跃,只要你逐页读下去…

java mongo subtract_春数据MongoDB的聚合框架,例外

组访问计算值,我有旅行的集合,每行有一个的startDateTime和completionDateTime财产。春数据MongoDB的聚合框架,例外我试图使用聚合框架来找到用户的出行的平均持续时间。我的聚集看起来非常简单,但和它抛出一个异常。有以下3个步骤…

一键转发抢红包源码及搭建教程

导读:一键转发抢红包搭建教程如下:源码请在资源模块下载。 搭建教程 第一步注册bmob建立一个项目 项目包括这些表单(file表可以不建立) (应用ID在后台项目设置里面) 表DaSha这样建立 表Sha这样建立 找zi()方法第一步

Java性能教程– Java 8流有多快?

在此JAX Magazine的预览预览中,JAX伦敦发言人Angelika Langer为使用Java流的任何人回答了最重要的问题:它们真的更快吗? Java 8是JDK收集框架的主要新增功能,即流API。 与集合相似,流表示元素序列。 集合支持对单个元…

android 开发

初学者学习 Android 开发,有什么好网站推荐? 前段日子一直在看安卓巴士这个网站,但网站突然进行改版,很多内容都找不到了,一下子怅然若失起来1 条评论 分享按投票排序按时间排序50 个回答 yava,半瓶水fei …

java迭代器删除重复元素_Java中的List删除重复元素

List接口做为Java集合框架中的一员,对数据的操作和处理比数组方便许多。在数组中插入一个元素要从数组的最后一个元素到当前插入的位置依次向后移动一位,然后为插入的位置进行赋值。在数组删除一个元素要从删除元素的下一个元素位置到数组最后一个元素依…

2021Golang技术基础知识及学习路线图

导读:Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发…

SDWebImage的使用说明

1. 在需要的地方导入头文件 #import "UIImageViewWebCache.h" webCache:网络缓存,几乎目前所有的浏览器都有一个内置的缓存,它们通常利用客户端本地的内存和硬盘来完成缓存工作, 同时允许用户对缓存的内容大小作控制。 这个方法默认…

深入了解区块链技术及其常见误区

导读:区块链是一个信息技术领域的术语。从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。基于这些特征,区块链技术奠定了坚实的“信任”基础,创造了可靠的“合作”机制,具有广阔的运用…

ztree java 增删改_Ztree实现增删改查

1.和另一篇文章--[TreeGrid 实现增删改查]前面的内容一致,只需要创建一个html页面,命名为ztree-01.html,粘贴如下网址的代码进入ztree-01.html。访问http://www.treejs.cn/v3/faq.php#_206复制这些代码html> ZTREE DEMO TITLE>HEAD>…

gwt api_使用RequestFactory API进行Spring GWT集成

gwt api从GWT 2.4开始,将RequestFactory API与后端的Spring服务集成很容易,您需要做的就是在服务器上创建一个自定义ServiceLocator,GWT将使用它来正确定位被调用的服务: public class SpringServiceLocator implements ServiceLo…

Android Studio导入项目非常慢的解决办法

问题 Android Studio目前已经更新到2.0 Preview 6了,作为Google大力推崇的开发工具,相对于Eclipse ADT有着不可比拟的优势。然而在实际使用时,依然有不少不爽的地方。Android Studio原生支持使用Gradle来构建项目本是个不错的想法&#xff0c…

AI时代——人工智能技术图谱,它来啦(机器学习+深度学习学习路线)

导读:人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作…