休眠实现。我们是否付出了反思代价?

2023-11-27

很久以前,我正在使用反射创建一个迷你 ORM。

在阅读有关反射的内容时,我得到了类似的答案:

Java 反射性能

这是完全有道理的,我退出了我的迷你 orm 并锐化了我的 CTRL+C、CTRL+V 键(该库的目的是避免在我正在开发的网络应用程序中为不同的表一次又一次地重写相同的片段)

几年后,由于某种原因,我现在不记得(也不想记住)我正在阅读(或试图...)Hibernate 源代码,因为我想知道他们是否使用 AOP 动态生成代码并避免反射惩罚,但令我惊讶的是,我看到的所有东西都是纯粹的反射。

这是否意味着最受接受的 ORM 框架在几年前就阻止了我继续我天真的努力? :")

我的问题是:有人可以确认我对 Hibernate 实现的理解吗?他们是否会动态生成字节码以提高性能?或者我们(当我们使用它时)总是付出反射惩罚(顺便说一句,如果差异在某些毫秒内,我们没有人注意到或抱怨)

我们是否付出了反思代价?如果我们是的话,我认为是值得!!!

Regards.


Hibernate 使您的模型具有休眠意识。

使用反射有不同程度的成本。不断地查找特定类的方法是特别昂贵的。使用缓存副本通过反射执行方法并没有慢多少。如果考虑一下反射 api 必须完成才能调用该方法的任务,那么每个部分都很慢并且消耗 CPU 周期,这一切都是有道理的。

定位方法

  • 访问特定类的每个方法
  • 测试每个方法的可见性、方法签名等。
  • 生成字节码found method.

其中一个因素是典型类中方法的数量,并且其中一些操作并不是微不足道的,很明显这可能是昂贵的。

调用该方法。

每个反射方法相当于一些字节代码,它使用一些样板来调用目标方法以匹配反射接口。在执行此操作之前,它必须执行一些健全性检查,以便它可以抱怨好的消息,而不是让运行时抛出 ClassCastException 和类似的异常。

  • 如果实例方法检查传入的实例不为 null 并且类型正确。
  • 检查参数参数是否包含正确数量和类型的参数。
  • 在 try catch 中执行该方法。在 catch 中抛出 ITE 等。

所有这些额外的费用都会增加一些成本——虽然不是很多,但确实会让事情变得更慢。

运行时成本

一般来说,缓存方法和调用不会产生成本,但速度会慢一些。反射 api 本身确实尝试缓存方法和类,但找到正确的方法等仍然是一个缓慢的操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

休眠实现。我们是否付出了反思代价? 的相关文章

  • 如何从 AccountManager.getAccounts() 获取与特定帐户关联的图标

    每个帐户的帐户设置中都会显示一个图标 对于 Google 帐户有一个图标 对于 Facebook 帐户有另一个图标 有没有办法从应用程序的代码中获取该图标 最后我解决了 private Drawable getIconForAccount
  • 春天。使用java配置解决循环依赖而不使用@Autowired

    我有循环依赖和java配置 虽然使用 xml 配置解决它非常简单 但如果没有 Autowired 我无法使用 java 配置解决它 豆子 public class A private B b public B getB return b p
  • 在 Java 中将系统属性设置为 Null

    在我的单元测试中 我需要将 workingDir 系统属性设置为 Null 但我不能这样做 因为它给了我 NullPointerException System setProperty workingDir null 我该怎么做 您不能将属
  • 哪个 new 首先执行——在构造函数中还是在构造函数外?

    如果我定义一个类如下 public class myClass private x new anotherClass private y public myClass y new anotherClass 哪个变量会更早获得实例 x 或 y
  • 如何解析比 Java 中 NumberFormat 更严格的数字?

    我正在验证表单中的用户输入 我解析输入NumberFormat http docs oracle com javase 7 docs api java text NumberFormat html 但它是邪恶的 几乎允许任何事情 有没有办法
  • 使 TreeMap 比较器容忍 null

    这个定制的 Valuecomarator 按其值对 TreeMap 进行排序 但在搜索 TreeMap 是否具有某个键时 它不能容忍 nullpointException 如何修改比较器来处理零点 import java io IOExce
  • 使用 Java NIO 直接访问 Windows 磁盘

    我正在使用一个使用 Java NIO 的库来直接将文件映射到内存 但我在直接读取磁盘时遇到问题 I can直接使用读取磁盘FileInputStream与 UNC 合作 例如 File disk new File PhysicalDrive
  • 将图像缩略图上传到服务器,而不上传整个图像

    据我所知 我在这里问的是不可能的 但我想无论如何我都会问 以防我遗漏了什么 假设您想让用户上传 JPG 图像 并且这些图像被缩放为较小的图标 并且原始图像始终被丢弃并且不再需要 有没有什么方法可以在大多数现代浏览器中普遍使用 让用户选择硬盘
  • 使用Optional作为类中的属性是一个好习惯吗? [复制]

    这个问题在这里已经有答案了 我读过一些关于目的的内容Optional 不幸的是我不记得在哪里 在Java 8中 我很惊讶作者没有提到使用Optional作为类中的属性 由于我在课堂上经常使用选项 我想知道这是否是一个好的做法 或者我可以更好
  • 在 Eclipse 中导航 Java 调用堆栈

    在调试器中像GDB http sources redhat com gdb 当您在断点处停止时 您可以轻松地向上移动调用堆栈并检查相关的源和堆栈帧数据 在 Eclipse 中如何做到这一点 In the 调试视角 http www ibm
  • 找不到模块:javafx.controls

    我已经下载了JavaFX SDK 解压它并设置PATH TO FX系统变量 如下本说明 https openjfx io openjfx docs install javafx 我使用了以下代码示例 import javafx applic
  • Maven:如何获取捆绑在包中的 .so 库

    我有一个带有 jar 和 so 文件的第三方库 我配置了 pom xml 如下
  • 使用 java.nio.file.Paths 接口时缺少方案(IllegalArgumentException)

    这是一个非常简单的java问题 我在 Linux 系统上使用 Java 8 和 eclipse kepler 我一直在尝试尝试NIO 2 我的代码是 package lucasTest import java io IOException
  • 使用JPanel绘制直线并获取点坐标

    我现在完全不知所措 我没有太多用 Java 构建 GUI 我一直在阅读有关 swing 和 JPanel 的所有内容 我认为我想做的事情是可能的 我只是还没有弄清楚how 我正在尝试构建一个 GUI 您可以在其中在某个绘图区域内绘制直线 我
  • Java 通用问题

    下面的代码可以编译 但如果我取消注释行 它不会编译 我很困惑为什么 HashMap 确实扩展了 AbstractMap 并且声明映射的第一行可以正常编译 import java util AbstractMap import java ut
  • 如何根据服务器/环境动态加载服务器配置?

    目前 我设置了 Maven 配置文件 以便能够为不同的环境 开发 演示 暂存 生产等 部署我的项目 并且它工作得很好 但问题是 对于我拥有的每个模块 Web 应用程序 我需要复制 粘贴此配置文件 它们都是属性文件 当我需要更改环境 服务器配
  • Java可以进行进程监控吗?

    是否可以用Java编写一个在托盘中运行的应用程序 并且当启动某个应用程序时 它可以检测到它 我想对某些程序执行此操作 以了解我每周使用它们多长时间 我是 Java 新手 所以我不知道 Java 是否是最适合此操作的语言 或者它是否具有对操作
  • Selenium Webdriver 中的 IF 语句

    我想知道是否有人可以帮助我解决我正在尝试解决的问题以及 Java 中 Webdriver 的 If 语句 当登录到我正在测试的应用程序时 可以在主页之前进入安全问题页面 如果是新用户等 我希望测试中的代码做的是 如果出现安全问题页面 请填写
  • 确保对象实现 Comparable

    我有一个小问题 想知道如何解决它 我有一个通用类Tuple
  • 使用反射 API 填充 Proto 中的地图字段

    我正在尝试编写一个模块 该模块将获取 Message Builder 和从字段名称到值的映射 并将用值填充构建器 一切正常 直到我遇到地图字段 使用 Proto3 我收到一条特定消息 我知道我可以执行该消息的字段 builder b put

随机推荐

  • 使用Cgroups限制cpu使用

    我正在尝试使用 cgroups 来限制 CPU 使用率 我正在使用本指南https access redhat com documentation en US Red Hat Enterprise Linux 6 html Resource
  • 无法从使用本地类型参数化的另一个包中实现来自另一个包的泛型类型的特征

    此测试代码 playpen use std fmt Display Formatter Error struct MyLocalType type MyResult Result
  • 在java中绘制圆的切片?

    我想通过一个实心圆来表示一个计时器 该实心圆是在计时器的过程中逐段完全绘制的 IE 如果在 4 秒计时器内每 1 秒填充一次圆圈 第一个将显示四分之一圆 然后是半圆 然后是四分之三 最后是一个完整的圆 有没有办法在java中绘制这些圆的切片
  • 在 hbase shell 上执行 ValueFilter 或 ColumnFilter

    谁能告诉我如何从 hbase shell 命令行执行限定符过滤器或 ValueFilter 它与使用任何编程语言进行编码的方式非常相似 例如 import org apache hadoop hbase filter CompareFilt
  • Hadoop mapReduce 如何在 HDFS 中仅存储值

    我用它来删除重复的行 public class DLines public static class TokenCounterMapper extends Mapper
  • 字符串池行为

    我读了这个关于Java字符串池的问题并了解字符串池的基本概念 但仍然不了解其行为 第一 如果直接赋值并且 s1 和 s2 都引用池中的同一个对象 它就可以工作 String s1 a bc String s2 ab c System out
  • 阻止元素参与文本选择

    我有一些源代码 pre code 行号在单独的 div 选择文本后 行号会随之出现 并随后被复制 即使我选择源代码块上方和下方的元素 是否有任何方法可以防止行号成为选择的一部分 为了那些关闭 JavaScript 的人的利益 我想避免使用
  • System.arrayCopy 很慢

    我一直在尝试测量 System arrayCopy 与 Arrays copyOf 的性能 以便正确选择其中之一 只是为了基准测试 我还添加了手动复制 结果令我惊讶 显然我错过了一些非常重要的东西 你能告诉我它是什么吗 实现如下 见前4种方
  • 为什么长长联合成员的对齐比包含的联合/结构更大?它是否正确?

    From 这个问题人们可能会开始相信 一个联盟的联盟不小于其单个成员的最大联盟 但我有一个问题long long输入 gcc g 完整的例子可以找到here 但以下是我的问题的相关部分 union ull long long m struc
  • C# 加权随机数

    我需要游戏编程方面的帮助 你打开一个箱子 并以给定的概率找到一个物品 物品 机会 A 10 B 30 C 60 Random random new Random int x random Next 1 101 if x lt 11 Numb
  • Ruby 拒绝正确划分

    我只是想得到一个百分比 irb main 001 0 gt 25 50 100 gt 0 正如我的计算器所证实的那样 这绝对应该等于 50 将相同的方程复制并粘贴到 gcalc 中 为什么 Ruby 拒绝这样做 它正在做整数除法 基本上 2
  • LINQ 列表到句子格式(插入逗号和“and”)

    我有一个 linq 查询 它执行一些简单的操作 例如 var k people Select x gt new x ID x Name 然后我想要一个函数或 linq lambda 或者使用逗号和 and 以句子格式输出名称的东西 1 Jo
  • 程序完成后分支预测器条目失效?

    我试图了解分支预测器条目何时无效 以下是我所做的实验 Code1 start measure branch mispred while X times if something something do useless endif endw
  • 如何将 JavaFX 2 中场景图形的内容输出到图像

    如何输出a的内容SceneJavaFX 2 中的图表到Image 事实上 我正在开发一个应用程序 它基本上是设计卡片的 因此 用户只需单击各种选项即可自定义场景 最后我想将场景内容导出到图像文件 我怎么做 在 FX 2 2 中出现了新的快照
  • 从 Xamarin Android 上的另一个 Activity 启动一个 Activity

    我发现这个 java 代码可以创建一个通用方法来从其他活动启动任何活动 public void gotoActivity Class activityClassReference Intent i new Intent this activ
  • 如何通过点击html元素获取xpath

    我对编程很陌生 必须在单击 html 元素时生成 Xpath 例如 如果我单击了用户名的文本框 那么它应该给我类似的 xpath html head body tr 1 table 2 等等等等 最主要的是我不能使用 firebug 因为我
  • 我可以检查现在是否有 UIAlertView 显示吗? [复制]

    这个问题在这里已经有答案了 我可以在 iOS 应用程序的任何部分检查当前是否显示 UIAlertView 吗 我找到了这段代码 NSClassFromString UIAlertManager performSelector selecto
  • ASP.NET MVC 从数据库加载 Razor 视图

    ScottGu 提到我们应该能够从数据库加载 Razor 视图 查看评论部分 那么有人有关于如何做到这一点的示例吗 Thanks 您可能想检查从数据库而不是文件中提取视图 or 使用 VirtualPathProvider 从 DLL 加载
  • Android - 如何使用包名称启动第三方应用程序?

    我想知道如何使用包名称从我的应用程序启动另一个应用程序 我有字符串格式的包名称 例如 String pkgName com example appName 这就是为什么我无法从中获取类名或任何其他有价值的详细信息 我可以用它们来做出正确的意
  • 休眠实现。我们是否付出了反思代价?

    很久以前 我正在使用反射创建一个迷你 ORM 在阅读有关反射的内容时 我得到了类似的答案 Java 反射性能 这是完全有道理的 我退出了我的迷你 orm 并锐化了我的 CTRL C CTRL V 键 该库的目的是避免在我正在开发的网络应用程