- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
很久以前,我正在使用反射创建一个迷你 ORM。
在阅读有关反射的文章时,我得到了类似这样的答案:
这完全有道理,我退出了我的迷你 orm 并加强了我的 CTRL+C、CTRL+V 键(该库旨在避免在我正在工作的 Web 应用程序中为不同的表一次又一次地重写相同的片段上)
多年后出于某种原因我现在不记得(也不想记住)我正在阅读(或试图...)Hibernate 源代码,因为我想知道他们是否使用 AOP 生成代码飞行并避免反射惩罚,但令我惊讶的是,我看到的所有东西都是纯粹的反射。
这是否意味着最被接受的 ORM 框架在几年前确实阻止了我继续我天真的努力? :")
我的问题是:有人可以确认我对 Hibernate 实现的理解吗?他们是否动态生成字节码以提高性能?或者我们(当我们使用它时)是否总是支付反射惩罚(顺便说一句,如果差异在几毫秒内,我们都没有注意到或提示过)
我们是否正在支付反射惩罚?如果我们是,我认为这是值得的!!!
问候。
最佳答案
Hibernate 检测您的模型以感知 hibernate 。
使用反射的成本各不相同。不断查找特定类的方法特别昂贵。使用缓存副本通过反射执行方法并没有那么慢。如果一个人想到反射 api 必须完成的任务来调用方法,那么每个部分都很慢并且消耗 cpu 周期都是有道理的。
典型类中的方法数量以及其中一些操作并非微不足道的一个因素很明显,这可能代价高昂。
每个反射方法相当于一些字节代码,它调用带有一些样板的目标方法来匹配反射接口(interface)。在执行此操作之前,它必须执行一些健全性检查,以便它可以用友好的消息进行提示,而不是让运行时抛出 ClassCastException 和类似的异常。
所有这些额外的东西都会增加一些成本 - 不是很多,但确实会让事情变得更慢。
一般来说,缓存方法和调用是没有成本的,但速度有点慢。反射 api 本身确实尝试缓存方法和类,但找到正确的方法等仍然是一个缓慢的操作。
关于java - hibernate 实现。我们要支付反射惩罚吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/547899/
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 6 年前。 Improve this qu
如果我使用 Eigen 的成员函数 Matrix3Xf 矩阵 myMatrix.middleCols(a, b) with a = 0, b = myMatrix.cols() -1,我得到了性能损失
我有一个关于 SEO 的小问题,尤其是对于 Google。在 WooCommerce 中,您可以将产品添加到类别中,也可以为产品添加产品标签。 所以我的问题是,当我有一个产品,例如梅赛德斯汽车,并将其
我正在制作一个网站,该网站将对 Internet 上数十万个其他网站的隐私政策进行审查。它的初始内容基于我对 CommonCrawl 的运行50 亿页网页转储和 analyzing all the p
我正在考虑使用 HTML5 数据属性来更轻松地为我的应用程序编写第三方脚本。因此,考虑两种情况: 页面上有 10'000 个 HTML 元素,如 Sticker . 还有其他 10,000 个 HTM
像这样在相应的设备上显示视网膜和非视网膜: 有效。但是 Google Pagespeed Insight 告诉我们在加载 CSS 之前它无法呈现它,我们因此受到惩罚。但是,仅在移动
我正在开发一个基于 Bootstrap 的响应式网站。主网站导航中的下拉菜单是通过单击而不是悬停打开的。每个部分没有索引内容,只有下拉列表中的特定页面链接。 如果内容位于: 是否会受到 SEO 惩罚
给定 vector 加法: NPNumber NPNumber::plus(const double o) const { vector c; for (double a : va
我正在使用带有 LogisticRegression 的嵌入式方法(L1 - Lasso)运行分类问题的特征选择过程。 我正在运行以下代码: from sklearn.linear_model imp
我是一名优秀的程序员,十分优秀!