慎用动态编译提供新2娱乐官网,dafa888等产品欢迎前来洽谈业务合作

dafa888

dafa888资讯

dafa888新闻

慎用动态编译

来源:新2娱乐官网 时间:2019-05-02

  动态编译一直是Java的梦想,从Java 6版本它开始支持动态编译了,可以在运行期直接编译.java文件,执行.class,并且能够获得相关的输入输出,甚至还能监听相关的事件。不过,我们最期望的还是给定一段代码,直接编译,然后运行,也就是空中编译执行(on-the-fly),来看如下代码:

  上面的代码较多,这是一个动态编译的模板程序,读者可以拷贝到项目中使用,代码中的中文注释也较多,相信读者看得懂,不多解释,读者只要明白一件事:只要是在本地静态编译能够实现的任务,比如编译参数、输入输出、错误监控等,动态编译就都能实现。

  Java的动态编译对源提供了多个渠道。比如,可以是字符串(例子中就是字符串),可以是文本文件,也可以是编译过的字节码文件(.class文件),甚至可以是存放在数据库中的明文代码或是字节码。汇总成一句话,只要是符合Java规范的就都可以在运行期动态加载,其实现方式就是实现JavaFileObject接口,重写getCharContent、openInputStream、openOutputStream,或者实现JDK已经提供的两个SimpleJavaFileObject、ForwardingJavaFileObject,具体代码可以参考上个例子。

  动态编译虽然是很好的工具,让我们可以更加自如地控制编译过程,但是在我目前所接触的项目中还是使用得较少。原因很简单,静态编译已经能够帮我们处理大部分的工作,甚至是全部的工作,即使真的需要动态编译,也有很好的替代方案,比如JRuby、Groovy等无缝的脚本语言。

  比如要在Struts中使用动态编译,动态实现一个类,它若继承自ActionSupport就希望它成为一个Action。能做到,但是debug很困难;再比如在Spring中,写一个动态类,要让它动态注入到Spring容器中,这是需要花费老大功夫的。

  动态编译毕竟需要一个编译过程,与静态编译相比多了一个执行环节,因此在高性能项目中不要使用动态编译。不过,如果是在工具类项目中它则可以很好地发挥其优越性,比如在Eclipse工具中写一个插件,就可以很好地使用动态编译,不用重启即可实现运行、调试功能,非常方便。

  如果你在Web界面上提供了一个功能,允许上传一个Java文件然后运行,那就等于说:“我的机器没有密码,大家都来看我的隐私吧”,这是非常典型的注入漏洞,只要上传一个恶意Java程序就可以让你所有的安全工作毁于一旦。

  建议记录源文件、目标文件、编译过程、执行过程等日志,不仅仅是为了诊断,还是为了安全和审计,对Java项目来说,空中编译和运行是很不让人放心的,留下这些依据可以更好地优化程序。

  本博客为自己总结亦或在网上发现的技术博文的转载。 如果文中有什么错误,欢迎指出。以免更多的人被误导。

  所谓动态编译,就是在程序运行时产生java类,并编译成class文件。 在D盘test目录下有两个java文件:AlTest1.java、AlTest2.java,现需要通过java代码实现java...博文来自:扬帆舟的博客

  (转载)JAVA动态编译--字节代码的操纵在一般的Java应用开发过程中,开发人员使用Java的方式比较简单。打开惯用的IDE,编写Java源代码,再利用IDE提供的功能直接运行Java程序就可以了。...博文来自:m1993619的专栏

  from:周五晚,小雨,少见的未加班。无聊,遂准备写一篇博客,介绍一下C和C++运行库,只...博文来自:XhaoDeng

  原文地址静态编译:编译器在编译可执行文件时,把需要用到的对应动态链接库(.so或.ilb)中的部分提取出...博文来自:weixin_38907560的博客

  一、tools.jar问题:Java在进行动态编译的时候需要用到tools.jar资源包,此包在jdk\lib目录中。若tools.jar不存在则会出现进行编译时提示空指针异常:对于缺少jar包,首先...博文来自:菜菜的博客

  静态编译与动态编译的区别动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资...博文来自:houyahuiyu的专栏

  一.动态编译在某些情况下,我们需要动态生成java代码,通过动态编译,然后执行代码。JAVAAPI提供了相应的工具(JavaCompiler)来实现动态编译。//获取JavaCompilerJavaC...博文来自:wowwilliam0的博客

  开心一笑【年底是各种案件的高发期,我们去ATM取钱的时候,一定要注意遮挡,不要被陌生人看到你的余额,要不然啊,就,,,非常容易被人嘲笑。其实对于胖子来说,买衣服最简单了,都不用进去。直接就在门口问一句...博文来自:阿毅

  Microsoft的VisualStudio为我们在应用开发中提供的强大功能,我们是有目共睹。借助该工具,是我们的开发显得更加高效而轻松。从Microsoft把这个IDE的名字从VS.NET该为VS(...博文来自:FallingStar学习日记

  重载(Overload)和重写(Override)重载是指,同一个类里,方法名相同,方法入参类型不同或者个数不同的方法;重写是指子类重写父类的某个方法。不仅仅是概念上的不同,在运行时调用哪种方法的选择...博文来自:简单用心品质生活

  在开始码博文之前,写一点题外话博主现在大四在读,报了培训班学习java,目前上了两个月的课程,对培训班出身的程序员优势劣势略有体会。反射呢,老师在讲之前,说理解这个东西有些难度,就只教了使用方法(即简...博文来自:liuajiehe1234567的博客

  概述在Linux系统中,应用程序表现为两种文件,一种是可执行文件,另一种是脚本文件。可执行文件可执行文件是计算机可以直接执行的程序,与windows系统的.exe程序相似,它是由源代码经过一定的手段翻...博文来自:禹鼎侯的博客

  静态编译lib所谓静态链接就是把函数或过程直接链接到可执行文件中,成为可执行程序中的一部分,当多个程序调用同样的函数时,内存里就会有这个函数的多个拷贝,浪费内存资源生成lib文件,包含了函数索引以及实...博文来自:caicaptain的博客

  在某些情况下,我们可能需要动态生成java代码,通过动态编译,然后执行代码。JAVAAPI提供了相应的工具(JavaCompiler)来实现动态编译。下面我们通过一个简单的例子介绍,如何通过JavaC...博文来自:zleven的博客

  事实上,我们经常使用/bin目录下的javac编译工具来编译Java源文件。如果在Java程序中动态编译任意制定的Java语句,使用这个外部的javac编译器示范程序下面给出了一个简单的Java程序,...博文来自:yangzibin的博客

  JDK6.0推出了动态编译的新功能,能够在程序中动态的写一个类,再对之进行编译。编译成class文件后就可以通过类加载方式把动态编译的类加载到内存中。当然也能通过RunTime类调用javac命令来动...博文来自:berber78的专栏

  开发中需要根据不同的用户或者场景,采用不同的逻辑/效果,生成不同的包,但是大部分代码是不变的。如果同时维护两个大致相同的项目,工作会既枯燥又毫无用处,还浪费时间。这时候就该用到gradle的动态编译了...博文来自:的博客

  郦波觉得在唯才是举上做得更科学、更有现代社会学意义和人才学意义的是晚清中兴名臣曾国藩。    一是广收,意思与曹操的唯才是举一样。人才都有特长,他常教训弟弟,“人才以陶冶而成,不可眼孔太高,动谓无人可...博文来自:56

  从Java1.5开始就增加了可变参数(varargs)方法,又称作variablearitymethod。可变参数方法接受0个或多个指定类型的参数。它的机制是先创建一个数组,数组的大小为调用位置所传递...博文来自:萌萌小七的专栏

  建议67:慎用自定义异常 除非有充分的理由,否则不要创建自定义异常。如果要对某类程序出错做特殊处理,那就自定义异常。需要自定义异常的理由如下:1)方便测试。通过抛出一个自定义的异常类型实例,我们可以使...博文来自:侯文成的博客

  静态函数库一般扩展名为(.a),这类的函数库通常扩展名为libxxx.a。这类函数库在编译的时候会直接整合到程序中,所以利用静态函数库编译成的文件会比较大,这类函数库最大的优点就是编译成功的可执行文件...博文来自:轻锋的专栏

  正在看一个老项目的代码,满篇都是全局变量,整个逻辑真的是“意大利面条”,不晓得这些全局变量什么时候被改变,什么时候被调用,恨透了全局变量和传递引用(传递引用适可而止也就罢了,传递个4,5层,鬼知道变量...博文来自:来杯咖啡,随便聊聊。

  为了使用方便,可以把这两个函数接口定义为动态链接库或静态链接库。用动态链接库编译生成的可执行文件需调用.so文件方可正常运行,灵活但稍显麻烦;用静态链接库编译生成的可执行文件可直接运行,不用再调用如....博文来自:L_yangliu的专栏

  在牛客网刷题,无奈自己水平太菜,碰到这一题,弄了半天才弄懂…./*[编程题]双核处理一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可...博文来自:那又怎样的博客

  动态编译的可执行文件需要附带一个的动态链接库。在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程...博文来自:vincent1456的博客

  背景          原项目基于传统三层模式组织代码逻辑,随着时间的推移,项目内各模块逻辑互相交织,互相依赖,维护起来较为困难.为此我们需要引入一种新的机制来尝试改变这个现状,在考察了Javasp...博文来自:的博客

  类构造函数初始化过程中,经常使用memset()函数初始化变量、数组和结构体。但需要注意的是,千万不要对vector、string之类的容器使用memset()函数。      因为它会破坏容器内部的...博文来自:重文-技艺山海经

  我们运行的Java代码,一般都是编译之后的字节码。Dubbo为了实现基于SPI思想的扩展特性,可以灵活的添加额外的功能。对于SPI接口需要能够动态生成,这样就需要在运行的时候去编译加载这个设配类的代码...博文来自:carl.zhao的专栏

  对静态编译的程序而言,.o文件中的符号表一是要对外宣称自己定义了哪些符号,二是向外宣布自己引用了哪些符号,需要其他模块来支持。有了这些信息,staticlinker才能整合各个relocatableo...博文来自:farmwang的专栏

  编译,一般来说就是将源代码转换成机器码的过程,比如在C语言中中,将C语言源代码编译成a.out,,但是在Java中的理解可能有点不同,编译指的是将java源代码转换成class字节码的过程,而不是真正...博文来自:lmy86263的博客

  本文是转载,很详实但也累赘。个人认为的重点在文中以粗体标注。博文来自:Away From Comfort Zone

  反射——给定一个类的class实例,你可以获得Constructor,method和field实例。而且,Constructor,method和field实例使你能够通过反射机制操作他们的底层对等体。...博文来自:猫的阁楼

  笔者在最近的项目中对一个用户任意指定的Java项目或Java文件进行测试,这就涉及到编译和运行这些Java文件,折腾一段时间后实现了这个功能,在这记录下使用到的技术点。编译Java文件对于一个给定的j...博文来自:正在加载中

  内核源码树的目录下都有两个文档Kconfig和Makefile。分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关的内核配置菜单。在内核配置m...博文来自:Herok

  Java应用程序的性能经常成为开发社区中的讨论热点。因为该语言的设计初衷是使用解释的方式支持应用程序的可移植性目标,早期Java运行时所提供的性能级别远低于C和C++之类的编译语言。尽管这些语言可以提...博文来自:Hsuxu的专栏

  帐号相关流程注册范围 企业 政府 媒体 其他组织换句话讲就是不让个人开发者注册。 :)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账...博文来自:小雨同学的技术博客

  layer弹窗插件官方API并没有给出图标和按钮同时改变的写法,今天我硬是给试出来了,我自己都怕自己。 代码如下: layer.confirm(进行实名认证,{icon:3,btn:[实名认...博文来自:lfppsm的博客

  本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇...博文来自:Lynn_Blog

  看到很多朋友配置vsftpd时不能使用匿名用户上传和下载(创建目录或删除、重命名文件夹),本文主要解决vsftpd的匿名用户权限配制问题。...博文来自:九宫霓虹

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗! Docker的三大核心概念:镜像、容器、仓库 镜像:类似虚拟机的镜像、用俗话说就是安装文件。 容器:类似一个轻量...博文来自:我走小路的博客

  webService学习(二)—— 调用自定义对象参数 本文主要内容: 1、如何通过idea进行webService Client的简单实现(不再使用wsimport的方式,其实是ide帮我们做了...博文来自:止水的专栏

  为了把现实中的数学公式利用到计算机里面,所以在库中已经实现了很多数学函数的代码,我们直接调用就可以了! 用的时候需要加入头文件#include 或者#include   using name...博文来自:lily854212198的专栏

  一、组合模式适用场景把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式对部分对象和整体对象进行管理。二、组合模式结构 抽象构件(Conponent)角色:所有类的共有接口,定义了叶子和...博文来自:小小本科生成长之路

  一、Window简介 (1)Window表示一个窗口的概念,一般用不到,当在某些特殊的时候我们需要在桌面上显示一个类似悬浮窗的东西就需要Window来实现。 (2)Window是一个抽象类...博文来自:hxqneuq2012的专栏

  Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的Thread...博文来自:u011860731的专栏

  强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...博文来自:九野的博客

  安装oracle 9i后,居然把刚刚更改的数据库管理员密码给忘了,又不重新安装,太麻烦了,试了好久,终于修改成功了。1、运行到C盘根目录2、输入:SET ORACLE_SID = 你的SID名称3、输...博文来自:llxsharp的专栏

  2016 SWPU比赛结束了,但是web7还是有点没有搞太懂,于是根据官方的wp来复现了一下,官方的wp地址:首先搭建...博文来自:一个码农的笔记

  SQL Server查询和检索操作。 一道例题学会查询和检索操作: 1、在SQL SERVER 2008上附加teaching数据库,其中三张表的含义解释如下: 学生表dbo...博文来自:J.Anson的博客

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...博文来自:Websites

  阅读内容为:FX系列微型可编程控制器用户手册(通讯篇)中计算机链接功能章节。 采用本方法通信,pc端的实现,其实就是,把操作按照协议(2种)翻译成相应的字符串,通过串口发送给plc。 编写一应用程...博文来自:pengjc2001的博客

  :写的很详细了,最近公司邮箱也是收到了很多伪造邮件,不过都被iredmail拦截到垃圾邮箱了,看了这篇文章,受益匪浅。

www.2138.com 相关文章

  • 无相关信息

dafa888产品