范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

使用Lightrun对Java应用程序进行性能调整

  简介
  在这篇文章中,我将向你展示使用Lightrun分析一个Java应用程序,这样你就可以发现各种性能调整的改进,你可以应用到你当前的Java应用程序。
  在上一篇文章中,我解释了什么是Lightrun,以及你如何使用它来注入动态日志、捕获运行时快照或添加动态指标。
  在这篇文章中,我将使用Lightrun作为我的JPA关联获取验证器的替代品。  DefaultLoadEventListener
  当使用Hibernate获取JPA实体时,会触发一个   LoadEvent   ,由  DefaultLoadEventListener   ,处理方式如下。
  DefaultLoadEventListener   将检查该实体是否位于当前JPA持久化上下文或第一级缓存中。如果在那里找到了实体,那么就会返回相同的对象引用。
  这意味着,两个连续的实体获取调用将总是返回相同的Java   Object   引用。这就是JPA和Hibernate提供应用级可重复读取的原因。
  如果在第一级缓存中没有找到实体,Hibernate将尝试从第二级缓存中加载它,如果且仅当第二级缓存被启用。
  最后,如果实体不能从任何缓存中加载,它将被从数据库中加载。
  现在,这个过程可以在调用   EntityManager.find   ,在遍历一个关联时发生,也可以间接地用于  FetchType.EAGER   策略。 检查N+1查询问题
  JPA关联获取验证器文章解释了如何以编程方式断言JPA关联获取。这个工具在测试过程中非常有用,但是对于那些要第一次检查生产系统的顾问来说就不太实用了。
  例如,让我们举一个 Spring PetClinic 应用程序的例子。  @Entity@Table(name = "pets")public class Pet extends NamedEntity {    @Column(name = "birth_date")    @DateTimeFormat(pattern = "yyyy-MM-dd")    private LocalDate birthDate;    @ManyToOne    @JoinColumn(name = "type_id")    private PetType type;    @ManyToOne    @JoinColumn(name = "owner_id")    private Owner owner;    }复制代码
  Pet   实体有两个父关联,  type   和  owner   ,每个都被注解为  @ManyToOne   。然而,默认情况下,  @ManyToOne   关联使用  FetchType.EAGER   的获取策略。
  因此,如果我们加载2个   Pet   实体,同时也获取它们相关的  owner   关联。 List pets = entityManager.createQuery("""    select p    from Pet p    join fetch p.owner    where p.id in :petIds    """).setParameter("petIds", List.of(3L, 6L)).getResultList();复制代码
  Hibernate将执行3次查询。  SELECT     p.id as id1_1_1_,    p.name as name2_1_1_,     p.birth_date as birth_da3_1_1_,     p.owner_id as owner_id4_1_1_,     p.type_id as type_id5_1_1_,     o.id as id1_0_0_,     o.first_name as first_na2_0_0_,     o.last_name as last_nam3_0_0_,     o.address as address4_0_0_,     o.city as city5_0_0_,     o.telephone as telephon6_0_0_FROM     pets p JOIN     owners o ON o.id = p.owner_id WHERE     p.id IN (3, 6)SELECT     pt.id as id1_3_0_,     pt.name as name2_3_0_ FROM     types pt WHERE     pt.id = 3    SELECT     pt.id as id1_3_0_,     pt.name as name2_3_0_ FROM     types pt WHERE     pt.id = 6复制代码
  那么,为什么会有3个查询被执行,而不是只有一个?这就是臭名昭著的N+1查询问题。  使用Lightrun进行Java性能调优
  虽然你可以使用集成测试来检测N+1查询问题,但有时你不能这样做,因为你被雇来分析的系统已经部署到生产中,而你还没有看到源代码。
  在这种情况下,像Lightrun这样的工具就变得非常方便,因为你可以简单地动态注入一个运行时快照,这个快照只有在满足特定条件时才会被记录。
  第一步是在   DefaultLoadEventListener   Hibernate类的  loadFromDatasource   方法中添加一个运行时快照。
  注意,快照只记录相关的   LoadEvent   的  isAssociationFetch()   方法返回  true   。这个条件允许我们捕获N+1查询问题所执行的二次查询。
  现在,当加载所有姓戴维斯的宠物主人时,PetClinic应用程序会执行以下SQL查询。  SELECT DISTINCT     o.id AS id1_0_0_,    p.id AS id1_1_1_,    o.first_name AS first_na2_0_0_,    o.last_name AS last_nam3_0_0_,    o.address AS address4_0_0_,    o.city AS city5_0_0_,    o.telephone AS telephon6_0_0_,    p.name AS name2_1_1_,    p.birth_date AS birth_da3_1_1_,    p.owner_id AS owner_id4_1_1_,    p.type_id AS type_id5_1_1_,    p.owner_id AS owner_id4_1_0__,    p.id AS id1_1_0__FROM     owners oLEFT OUTER JOIN     pets p ON o.id=p.owner_idWHERE     o.last_name LIKE "Davis%"    SELECT     pt.id as id1_3_0_,     pt.name as name2_3_0_ FROM     types pt WHERE     pt.id = 6SELECT     pt.id as id1_3_0_,     pt.name as name2_3_0_ FROM     types pt WHERE     pt.id = 3复制代码
  而在检查Lightrun快照控制台时,我们可以看到有两条记录被注册。
  第一个快照看起来如下。
  而第二个快照看起来是这样的。
  请注意,由于大量使用了   FetchType.EAGER   策略,这两个快照对应于Spring Petclinic应用程序执行的二级查询。
  很酷,对吗?  结论
  虽然你可以在测试过程中使用JPA关联获取验证器来检测这些N+1查询问题,但如果你的任务是分析一个你从未见过的运行时系统,那么Lightrun就是一个发现各种问题及其发生原因的伟大工具。
  特别是因为Java性能调优是我被雇用的最常见的原因之一,Lightrun是我的工具集的一个很好的补充。

浦东这几个热门板块,却跌得很凶浦东是全上海面积最大的区域,也是全上海板块最多的区,但是经过2022年一年的市场回调,通过数据得知有好几个受大众欢迎的热门板块,跌幅凶得超乎意料。本篇我们就一同来看看,是哪些板块跌宏碁推出非凡Go2023轻薄本13代酷睿2。8KOLED屏,4999元起随着新一代处理器的上市,宏碁近期推出了非凡Go系列2023款轻薄本,该机搭载13代酷睿H45标压处理器(可选i513500Hi713700H),首发价4999元起,3月7日正式开售坏消息!原神外服热度直线下降,流量损失惨重!关服危机来临?众所周知,原神是一款国际手游,不仅在国内受到玩家欢迎在国外同样人气高涨。尤其是在日本韩国等国家,成为年度最受欢迎手游。很多人以为原神在国外发展得很好,其实最近确实遭遇了变故,尤其是半导体收音机维修小技巧随着现代生活的进步,维修家用电器的店铺越来越少,能维修收音机的那就更加少了。一部收音机出现损坏,很难找到可以维修的地方,也许是很简单的损坏,直接抛弃是很可惜的。小编根据多年的经验整开年即开跑!同济科研按下加速键奋战开门红,开年就开跑。寒假春节无空档,科研攻关未断线。近日,又有来自医学生命科学化学材料环境科学等领域的高水平学术成果接连发表于国际学术期刊。开好局起好步同济人,奋楫再出发!新型换换回收靠谱吗?平台隐私清除技术过硬值得信赖随着金融数字化的发展,很多人已经很少使用纸质人民币了,智能手机成为了他们的移动钱包,除了银行移动APP,微信支付宝QQ钱包等很多媒介都有可能造成个人信息的泄露。正是因为这些因素,很鸿蒙上成功调用相机!相机是一个系统的基础能力,能够通过调用相机进行拍照,在很多场景下都会使用到相机的调用,如人脸识别门禁,人脸解锁等操作。本文主要介绍在OpenHarmony应用开发中ArkUI开发框马斯克整活儿大赏推特已经被老顽童玩坏了马斯克科技圈里从来就不缺语出惊人做事古怪的大佬,SpaceX特斯拉推特三大巨头CEO马斯克就是其中最典型的一个。在接盘推特之后,马斯克就展现出了完全不一样的一面,从一个放飞理想的企气排球正面扣球的针对性训练热爱气排球,是一种生活态度!扣球是指队员在进攻线后跳起在空中用一只手或手臂在本方场区上空将高于球网上沿的球击入对方场区的一种击球方法。扣球是气排球比赛中最积极最有效的进攻,是得分的76人队有意贝弗利加盟据76人队记者透露目前,球队对第二阵容后卫线的防守问题很不满,球队方面想在买断市场上签下一名防守型后卫。后卫要加强此前就有消息传出,哈登和哈雷尔暗中在游说贝弗利的加盟球队,来增强替飞虎新主场奥体再亮相为新疆加油!近日,时隔三年CBA联赛终于恢复主客场制。新疆广汇飞虎篮球俱乐部已经与乌鲁木齐奥林匹克体育中心建立战略合作,双方将从本赛季第三阶段开始,共同为所有观众呈现精彩激烈的篮球赛事。区位图
长津湖这么豪横?票房破20亿吴京有望超过沈腾登顶票房第一人在今年的国庆档电影中,主旋律影片在全国院线持续热映。长津湖无疑成了网上最热门的话题。截至10月4日晚21时35分,电影长津湖上映5天,总票房突破20亿,成为中国内地影史第24部票房除了爱情,21岁的杨倩,人生已经没有遗憾21岁,清华学霸,颜值不差,登顶过全世界最高的领奖台,签约了一堆广告。要颜值有颜值,要财富有财富,要学历有学历。现在除了爱情,杨大妞的人生几乎是完美的。为什么有些人看似信手可得的,艾弗森评现役五大杀手杜兰特库里哈登比尔利拉德,谁最狠?艾弗森评现役五大杀手杜兰特库里哈登比尔利拉德,谁最狠?原创作者好火子NBA超级巨星艾弗森在接受美媒BR专访时,被问到现役联盟里最像他一样的杀手,艾弗森回答道凯文杜兰特斯蒂芬库里詹姆国庆假期,各地出游又现人从众景观,错峰出行缘何成为奢望我和祖国在一起2021年的国庆假期如约而至,一年一度的传统大片也再次上演,足不出户就能看遍祖国大江南北的人山和人海。来看看全国各地主要景区的盛况10月1日清晨北京天安门广场共计有1贾青在专攻富二代的路上,王思聪为何成最大的绊脚石?她做了什么威斯敏斯公爵问香奈儿对你来说,难道连威斯特斯公爵夫人这个头衔,都不够好吗?香奈儿亲爱的,你要知道,地球上有很多公爵夫人,但可可香奈儿只有一个!姐妹们,这个回答够不够扬眉吐气?当然,被安排的一生楚门的世界三十年生活在一个看似真实的不真实的世界里,以为自己生活富足美满幸福,可在别人眼中只不过是一场直播。01hr这个叫楚门的男人就是楚门的世界里面的主人公。他积极乐观,还富有幽默感,每天一花一世界,一吃一大碗,一逛一整天心怀浪漫也惜人间01小碎步也可以光芒万丈。02谁能一如既往,不改初见模样。03时间扑面而来,我们终将释怀。04喜欢稳定,不急不忙也不懒散。05心怀浪漫宇宙,也惜人间日常。06与其庸甄嬛传崔槿汐极可能是果郡王的卧底,几个细节露端倪导语在甄嬛传中,除了皇后与端妃,最深不可测的女人就是崔槿汐了。崔槿汐不像是一名普通的掌事宫女,更像是一名负有特殊使命的间谍与卧底。而她幕后的老板,就是舒太妃与果郡王。1崔槿汐的个性孙怡新剧男配,因萧剑走红,哭晕在香妃葬礼上的他如今已结婚生子说起朱宏嘉这个名字,或许少有人知道,但相信大家对他饰演的萧剑一定是不陌生的。老版的还珠格格虽然已经无法再在爱优腾等影视平台看到了,但剧里的每个角色依旧是经典且难以复制的。朱宏嘉饰演中日韩皆退赛,2021亚洲女排俱乐部锦标赛四强诞生2021亚洲女排俱乐部锦标赛在泰国呵叻激战正酣。考虑到疫情和球队备战安排,此前卫冕冠军天津渤海银行女排放弃了这次比赛。同时退赛的还有日本韩国越南朝鲜等多个国家的俱乐部。鉴于多个国家3055!3分球13中7,库里也给他当小弟,勇士赚大了,仅需216万NBA季前赛进行继续进行,在西部的一场焦点对话中,开拓者在主场迎战勇士队,两队是西部的老对手了,彼此也是非常的熟悉,虽然双方都有不少的人员变化,但是主力阵容都在,不过勇士这边的克莱