java 反射机制性能_Java反射机制的用途和缺点

Java反射机制的用途和缺点

反射的用途 Uses of Reflection

Reflection is commonly used by programs which require the ability to

examine or modify the

runtime behavior of applications running in the Java virtual machine. This

is a relatively advanced

feature and should be used only by developers who have a strong grasp of

the fundamentals of the language. With that caveat in mind, reflection is a

powerful

technique and can enable applications to perform operations which would

otherwise be impossible.

反射被广泛地用于那些需要在运行时检测或修改程序行为的程序中。这是一个相对高级

的特性,只有那些语言基础非常扎实的开发者才应该使用它。如果能把这句警示时刻放在心

里,那么反射机制就会成为一项强大的技术,可以让应用程序做一些几乎不可能做到的事情。

反射的缺点 Drawbacks of Reflection

Reflection is powerful, but should not be used indiscriminately. If it is

possible to perform an

operation without using reflection, then it is preferable to avoid using

it. The following concerns

should be kept in mind when accessing code via reflection.

尽管反射非常强大,但也不能滥用。如果一个功能可以不用反射完成,那么最好就不用。

在我们使用反射技术时,下面几条内容应该牢记于心:

1、性能第一 Performance Overhead

Because reflection involves types that are dynamically resolved, certain

Java virtual machine

optimizations can not be performed. Consequently, reflective operations

have slower performance

than their non-reflective counterparts, and should be avoided in sections

of code which are called

frequently in performance-sensitive applications.

反射包括了一些动态类型,所以 JVM 无法对这些代码进行优化。因此,反射操作的效

率要比那些非反射操作低得多。我们应该避免在经常被 执行的代码或对性能要求很高的程

序中使用反射。

2、安全限制 Security Restrictions

Reflection requires a runtime permission which may not be present when

running under a

security manager. This is in an important consideration for code which has

to run in a restricted

security context, such as in an Applet.

使用反射技术要求程序必须在一个没有安全限制的环境中运行。如果一个程序必须在有

安全限制的环境中运行,如 Applet,那么这就是个问题了。

3、内部暴露 Exposure of Internals

Since reflection allows code to perform operations that would be illegal in

non-reflective

code, such as accessing private fields and methods, the use of reflection

can result in

unexpected side-effects, which may render code dysfunctional and may

destroy portability.

Reflective code breaks abstractions and therefore may change behavior with

upgrades of the

platform.

由于反射允许代码执行一些在正常情况下不被允许的操作(比如访问私有的属性和方

法),所以使用反射可能会导致意料之外的副作用--代码有功能上的错误,降低可移植性。

反射代码破坏了抽象性,因此当平台发生改变的时候,代码的行为就有可能也随着变化。

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

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

相关文章

最近的生活

这个暑假主要时间都在公司实习,没有去自己学习很新的一些技术,因为现在这个公司的技术栈不是特别的新,不过实习了一段时间发现,其实技术栈新不新和你一个新手根本就没有半毛钱关系,根基不牢学什么白搭是吧 举个例子&am…

将大型项目从Ant迁移到Maven

事实是,我们处在艰难时期。 我们花了将近三个月的时间将构建机制从Ant迁移到Maven 。 如果您打算在大型项目中做同样的事情,那就是您必须安排的最短时间。 我们仍在努力解决这种迁移带来的一些附带影响,但幸运的是,它们并不是那么…

移动端布局方案探究

研究了淘宝,天猫和网易彩票163的wap主页样式布局,总结移动端布局方案 注意:代码运行是file协议,在chrome里不支持引用本地文件,会提示跨域错误,可以用firefox或者Safari打开 当时做的ppt下载: 2015年12月移…

搭建springboot环境

1.前戏准备: SpringBoot核心jar包:这里直接从Spring官网下载了1.5.9版本. jdk:jdk1.8.0_45. maven项目管理工具:3.5版本. tomcat:8.5版本. 本地仓库:注意settings.xml里面的设置"<localRepository>E:/SpringBoot/repository</localRepository>"红色部分代…

java生成带文字的图片_Java在背景图片上面加文字或者文字自动生成图片

正巧遇到一个项目需要图片合成&#xff0c;查阅了网上许多资料之后整理了一份生成图片的工具类&#xff0c;代码如下&#xff1a;package org.yygzs.acker.util;import java.io.IOException;import javax.imageio.ImageIO;import java.io.File;import java.awt.Font;import jav…

style对象的cssText方法

cssText 本质是什么&#xff1f; cssText 的本质就是设置 HTML 元素的 style 属性值。 cssText 怎么用&#xff1f; domElement.style.cssText "color:red; font-size:13px;"; cssText 返回值是什么&#xff1f; 在某些浏览器中&#xff08;比如 Chrome&#xff09…

Spring的Web MVC –重定向到内存泄漏

他们说一块岩石会引起雪崩。 最近&#xff0c;我的一位同事Marcin Radoszewski给了我一块岩石。 您可能永远都不会猜测它是什么&#xff0c;但是有机会在许多Web应用程序中使用它。 请允许我向您介绍这块石头。 您可能很清楚发布模式后的重定向 。 使用Spring Framework&#…

Android 学习Kotlin吗?

学习Kotlin吗&#xff1f;转载于:https://www.cnblogs.com/zhujiabin/p/8398185.html

.Net Core 2.0 生态(1).NET Standard 2.0 特性介绍和使用指南

.NET Standard 2.0 发布日期&#xff1a;2017年8月14日公告原文地址 前言 早上起来.NET社区沸腾了&#xff0c;期待已久的.NET Core 2.0终于发布&#xff01;根据个人经验&#xff0c;微软的产品一般在2.0时会趋于成熟&#xff0c;所以一个新的.Net开发时代已经来临&#xff01…

jquery中的创建节点和添加节点的方法

今天来说一下针对jquary关于创建节点和添加节点的方法&#xff0c;先来看看创建节点&#xff1a; 1、直接添加节点内容即可 $("div").append(<a href"http://www.baidu.com">百度一下</a>); 2、可以创建jquary对象添加进去 var $li$(<a hre…

Java – 2012年回顾和未来预测

这篇文章将重点讨论2012年发生的大小事件&#xff0c;并展望2013年的一些未来预测。其中一些预测将是诚实的猜测&#xff0c;而另一些则将是诚实的猜测。 好吧&#xff0c;只要说我的“恶魔般”的一面就已经接管了。 因此&#xff0c;我们无需再讨论Java的2012年了。 2012年–…

移动端 fixed 固定按钮在屏幕下方,然后按钮被键盘顶上来...顶上来了有没有~

在移动端 H5 页面开发中&#xff0c;我使用了 fixed 固定某个元素在屏幕的最下方&#xff0c; 这时点击输入框&#xff0c;接着非常非常自然地出现了元素被系统键盘顶起来的情况&#xff0c;如下图。 解决方案: 首先&#xff0c;给页面最外层包裹一层 div(相对定位) &#xf…

momentum公式

momentum对于w的更新公式&#xff1a; http://caffe.berkeleyvision.org/tutorial/solver.html转载于:https://www.cnblogs.com/ymjyqsx/p/7364743.html

带弹簧的Hazelcast分布式执行

ExecutorService功能是Java 5附带的&#xff0c;位于java.util.concurrent包中。 它扩展了Executor接口&#xff0c;并提供了线程池功能来执行异步简短任务。 建议使用Java Executor服务类型来查看基本的ExecutorService实现。 此外&#xff0c;ThreadPoolExecutor是ExecutorS…

Manacher's Algorithm 马拉车算法(最长回文串)

这个马拉车算法Manacher‘s Algorithm是用来查找一个字符串的最长回文子串的线性方法&#xff0c;由一个叫Manacher的人在1975年发明的&#xff0c;这个方法的最大贡献是在于将时间复杂度提升到了线性&#xff0c;这是非常了不起的。对于回文串想必大家都不陌生&#xff0c;就是…

java咖啡机故障5_【咖啡小常识】咖啡机不得不知道的常见故障及解决方法

原标题&#xff1a;【咖啡小常识】咖啡机不得不知道的常见故障及解决方法咖啡行业交流请加私人微信精品咖啡香&#xff0c;微信号&#xff1a;(长按复制)thinkingcapacity一&#xff0e;没有蒸汽或做出的咖啡不热可能原因1、在一个时间段放出了大量的热水(不建议使用咖啡机自带…

idiom的学习笔记(一)、三栏布局

三栏布局左右固定&#xff0c;中间自适应是网页中常用到的&#xff0c;实现这种布局的方式有很多种&#xff0c;这里我主要写五种。他们分别是浮动、定位、表格、flexBox、网格。 在这里也感谢一些老师在网上发的免费教程&#xff0c;使我们学习起来更方便&#xff01;&#x…

USB之HID类Set_Report Request[调试手记1]

请翻开《Device Class Definition for Human Interface Devices (HID) Version 1.11 》7.2.2 Set_Report Request 现在我们先那键盘来做实验来观察。[备注:测试当时NUM指示灯亮] 通过笔记本上按“capslock”按键来观察外置键盘上大小写的指示灯。 通过USBlyzer观察到 发送03的…

Devoxx 2012:Java 8 Lambda和并行性,第1部分

总览 Devoxx是世界上最大的独立于供应商的Java会议&#xff0c;于11月12日至16日在比利时的Atwerp举行。 今年规模更大了&#xff0c;来自40个不同国家的3400名与会者。 和去年一样 &#xff0c;我和来自SAP的一小群同事都来了&#xff0c;并享受了很多。 在Nao机器人令人印象…

python实现微信接口——itchat模块

python实现微信接口——itchat模块 安装 sudo pip install itchat 登录 itchat.auto_login() 这种方法将会通过微信扫描二维码登录&#xff0c;但是这种登录的方式确实短时间的登录&#xff0c;并不会保留登录的状态&#xff0c;也就是下次登录时还是需要扫描二维码&#xff0…