- 浏览: 468429 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (146)
- Maven (3)
- Quartz (10)
- Hessian (3)
- JDK (42)
- eclipse (4)
- 设计思想 (6)
- XML (8)
- JavaMail (1)
- Spring (11)
- mina (1)
- HsqlDb (1)
- Cache (2)
- Tool (6)
- 心情 (5)
- JQuery (0)
- Hadoop (5)
- Hbase (3)
- 自动构建 (7)
- JNDI (0)
- 代码赏析 (5)
- Oracle (1)
- Excel (4)
- Effective Java (5)
- JAXB (4)
- fdafasdf (1)
- ccc (0)
- web (3)
- concurrent (1)
- CVS (1)
- eclipse plugin (2)
- Apache (10)
最新评论
-
chxiaowu:
nice!
Quartz实现固定执行次数 -
zxjlwt:
学习了。http://surenpi.com
自定义ClassLoader -
kadlly:
public static final Logger log ...
Hessian 权限认证 -
spring_springmvc:
java程序语言学习教程 地址http://www.zuida ...
Java-Final -
liushuiwuyan:
[img][/img]
设计模式-单例
性能都是相对的,如果调用量不是很大的话,可以忽略,毕竟使用为主。groovy支持的语法还是很多的,灰常推荐,我这只是小实验罢了
代码执行如下:
这是我测试的结果,使用反射与使用groovy的差距。
其实反射没有大家想像的这么慢, 反射缓存Method后,性能可以提升差不多2倍.
这个测试我实现了自己的ScriptEngineFactory,并使用jdk的反射机制与Groovy进行对比。
代码执行如下:
/** * @param args * @throws ScriptException */ public static void main(String[] args) throws ScriptException { // TODO Auto-generated method stub ScriptEngineManager sem = new ScriptEngineManager(); //sem.registerEngineName("frame", new FrameScriptEngineFactory()); ScriptEngine engine = sem.getEngineByName("groovy"); Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE); bindings.put("tag", new TagImpl()); bindings.put("bcontext", new BContext(9)); bindings.put("account", 9); long s = System.currentTimeMillis(); for(int i=0;i<10000;i++){ Object result = engine.eval("tag.hasTag(account)"); Object result1 = engine.eval("tag.hasTag(account)"); Object result2 = engine.eval("tag.isManager(bcontext)"); } System.out.println(System.currentTimeMillis()-s); //No cache 234 203 187 //cache 125 141 141 125 //groovy 2375 1796 1719 }
这是我测试的结果,使用反射与使用groovy的差距。
其实反射没有大家想像的这么慢, 反射缓存Method后,性能可以提升差不多2倍.
这个测试我实现了自己的ScriptEngineFactory,并使用jdk的反射机制与Groovy进行对比。
package org.miniframe.modules.script; import javax.script.ScriptEngine; /** * this is a factory to product ScriptEngine. */ public class FrameScriptEngineFactory extends AbstractScriptEngineFactory { @Override public String getEngineName() { return "frame"; } @Override public String getEngineVersion() { return "1.0"; } @Override public ScriptEngine getScriptEngine() { FrameScriptEngine framese = new FrameScriptEngine(this); return framese; } }
package org.miniframe.modules.script; import java.io.Reader; import javax.script.AbstractScriptEngine; import javax.script.Bindings; import javax.script.ScriptContext; import javax.script.ScriptEngineFactory; import javax.script.ScriptException; public class FrameScriptEngine extends AbstractScriptEngine{ private FrameScriptEngineFactory framesef; public FrameScriptEngine(FrameScriptEngineFactory framesef){ super(); this.framesef=framesef; } @Override public ScriptEngineFactory getFactory() { return framesef; } /** * * 1. first compile script to compileScript * 2. execute compoleScript to get result. */ @Override public Object eval(String script, ScriptContext context) throws ScriptException { FrameCompilable compiled = new FrameCompilable(); FrameCompiledScript compiledScript = (FrameCompiledScript) compiled.compile(script); return compiledScript.eval(context); } @Override public Object eval(Reader reader, ScriptContext context) throws ScriptException { // TODO Auto-generated method stub return null; } @Override public Bindings createBindings() { // TODO Auto-generated method stub return null; } }
package org.miniframe.modules.script; import java.io.Reader; import java.util.HashMap; import java.util.Map; import javax.script.Compilable; import javax.script.CompiledScript; import javax.script.ScriptException; public class FrameCompilable implements Compilable { private Map<String,CompiledScript> compiledCache = new HashMap<String,CompiledScript>(); @Override public CompiledScript compile(String script) throws ScriptException { CompiledScript compiledScript = compiledCache.get(script); if(compiledScript!=null){ return compiledScript; }else{ FrameCompiledScript frameScript = new FrameCompiledScript(); frameScript.compile(script); compiledCache.put(script, frameScript); compiledScript = frameScript; } return compiledScript; } @Override public CompiledScript compile(Reader script) throws ScriptException { // TODO Auto-generated method stub return null; } }
package org.miniframe.modules.script; import javax.script.Bindings; import javax.script.CompiledScript; import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptException; public class FrameCompiledScript extends CompiledScript { private String script; private String target; private String method; private String[] args; public String getTarget() { return target; } public void setTarget(String target) { this.target = target; } public String getMethod() { return method; } public void setMethod(String method) { this.method = method; } public String[] getArgs() { return args; } public void setArgs(String[] args) { this.args = args; } public void compile(String script){ this.script=script; String[] fs = script.split("\\."); if(fs.length==2){ String target = fs[0]; String[] ss = fs[1].split("\\("); String method = ss[0]; String[] args = ss[1].substring(0, ss[1].length()-1).split(","); setTarget(target); setMethod(method); setArgs(args); } } @Override public Object eval(ScriptContext context) throws ScriptException { FrameInvocable invocable = new FrameInvocable(script); Bindings binding = context.getBindings(ScriptContext.ENGINE_SCOPE); Object[] objargs = new Object[args.length]; for(int i=0;i<args.length;i++){ Object objarg = binding.get(args[i]); objargs[i]=objarg; } Object obj = null; try { obj = invocable.invokeMethod(binding.get(target), method, objargs); } catch (NoSuchMethodException e) { } return obj; } @Override public ScriptEngine getEngine() { // TODO Auto-generated method stub return null; } }
package org.miniframe.modules.script; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.HashMap; import java.util.Map; import javax.script.Invocable; import javax.script.ScriptException; public class FrameInvocable implements Invocable { private static Map<String, Method> methodCache = new HashMap<String, Method>(); private boolean flag = true; private String script; public FrameInvocable(String script) { this.script = script; } @SuppressWarnings("rawtypes") @Override public Object invokeMethod(Object thiz, String name, Object... args) throws ScriptException, NoSuchMethodException { Method method = methodCache.get(script); Object re = null; if (method != null) { re = invoke(thiz, method, args); } else { Class[] parameterTypes = new Class[args.length]; for (int i = 0; i < args.length; i++) { parameterTypes[i] = args[i].getClass(); } method = getMethod(thiz, name, parameterTypes); if(flag){ methodCache.put(script, method); } re = invoke(thiz, method, args); } return re; } /** * search method from me and parents * * @param target * @param methodName * @param args * @return */ public static Method getMethod(Object target, String methodName, Class<?>... args) { Method method = null; try { for (Class<?> searchType = target.getClass(); searchType != Object.class; searchType = searchType .getSuperclass()) { method = searchType.getDeclaredMethod(methodName, args); if (method != null) { return method; } } } catch (SecurityException e) { throw e; } catch (NoSuchMethodException e) { throw new IllegalArgumentException("invalid:no method [" + methodName + "] on target [" + target + "]", e); } return method; } /** * invoke method * * @param target * @param method * @param args * @return * @throws Throwable */ public static Object invoke(Object target, Method method, Object[] args) { try { if (!Modifier.isPublic(method.getModifiers()) || !Modifier.isPublic(method.getDeclaringClass() .getModifiers())) { method.setAccessible(true); } return method.invoke(target, args); } catch (InvocationTargetException ex) { throw new IllegalArgumentException(ex); } catch (IllegalArgumentException ex) { throw new IllegalArgumentException( "invalid: tried calling method [" + method + "] on target [" + target + "]", ex); } catch (IllegalAccessException ex) { throw new IllegalArgumentException("Could not access method [" + method + "]", ex); } } @Override public Object invokeFunction(String name, Object... args) throws ScriptException, NoSuchMethodException { // TODO Auto-generated method stub return null; } @Override public <T> T getInterface(Class<T> clasz) { // TODO Auto-generated method stub return null; } @Override public <T> T getInterface(Object thiz, Class<T> clasz) { // TODO Auto-generated method stub return null; } }
发表评论
-
Java Application Cache
2016-09-27 19:25 884Application Cache is used very ... -
Java 字符串分词
2015-01-02 14:43 1749在Java的世界里有个类型 ... -
Fake Code easy implements
2014-04-01 15:41 1028package org.miniframe.modules ... -
JDK regex 用法及用途
2014-03-31 15:48 1215查找 Boolean flag = pattern.mat ... -
生产者消费者(四)
2014-03-04 12:32 1148需求: 多个生产者不断的生产产品,多个消费者不断的消费产品,仓 ... -
生产者消费者(三)
2014-03-04 10:59 961需求: 多个生产者不断的生产产品,多个消费者不断的消费产品,仓 ... -
生产者消费者(二)
2014-03-03 15:40 695需求: 多个生产者不断的生产产品,多个消费者不断的消费产品,仓 ... -
生产者消费者模式(一)
2014-02-28 14:30 1031需求: 多个生产者不断的生产产品,多个消费者不断的消费产品,仓 ... -
查看Class文件使用的JDK版本
2013-10-30 14:17 1115由于JDK一般是向下兼容的,所以有时候本地的JDK版本比类库的 ... -
Java源代码转码
2012-12-20 17:22 1323现在中国的项目很多,编码无非是UTF-8,GBK,GB2312 ... -
Tomcat集成OSGI,并通过JNDI开放Web调用
2012-12-03 11:22 3135Tomcat集成OSGi,首先要选择OSGI服务器,我这里采用 ... -
JDK的Logging
2012-11-07 15:49 1684jdk自带有一个log日志,对于一般的使用,仅够了. 代码如下 ... -
java.util.*
2012-11-06 14:23 1377java.util 工具包,灰常的有用,有机会一定要研读源码。 ... -
java.util.concurrent.*
2012-11-02 10:38 17761. java.util.concurrent.ArrayBl ... -
java.util.rt.*
2012-10-31 13:51 11131. java.util.HashMap 散列表,主要是以离散 ... -
巧秒设计方法,不返回null
2016-09-27 19:32 723/** * {@inheritDoc} * ... -
java doc 代码文档
2012-07-13 13:58 1330对于代码规范不解释了,网上很多。 在编写代码的时候,有一点灰 ... -
接口与抽象类
2012-07-11 16:53 11241. 接口设计必谨慎,除非业务变更,否则打死不能动接口。[不变 ... -
JVM优化机制好诡异
2012-04-20 08:43 1466long i[] = new long[1000000]; ... -
JVM优化机制好诡异
2016-09-27 19:32 562long i[] = new long[100000 ...
相关推荐
标题中的“jdk1.6集成jjwt的问题”指的是在Java Development Kit (JDK) 版本1.6的环境下,尝试整合JSON Web Token (JWT) 库jjwt时遇到的挑战。JWT是一种开放标准(RFC 7519),用于在各方之间安全地传输信息作为 ...
mac for jdk1.6 jdk6 安装版 里面有两个jdk1.6的安装包,都可以用 如果电脑上安装有1.7,1.8等高版本jdk就不要再下安装包了,安装包安装会报错 命令是这个:brew install java6或 brew install homebrew/cask-...
这个版本在Java社区中具有广泛的影响力,因为它引入了许多新特性和性能优化,使得开发者能够更高效地编写和运行Java程序。 首先,JDK 1.6包含JRE(Java Runtime Environment),它是运行Java应用程序所必需的环境。...
通过这些新特性,JDK1.6为开发者提供了更强大的工具集,提升了开发效率,同时也优化了应用程序的性能和可管理性。理解并掌握这些特性,对于深入理解Java技术和开发高质量的Java应用具有重要的意义。
### JDK1.6的九大新特性详解 #### 一、Desktop类和SystemTray类 在JDK1.6中,AWT库新增了两个重要的类:`Desktop`和`SystemTray`。 - **Desktop类**:此类提供了一系列静态方法用于执行常见的桌面操作,如打开...
- **下载**:从Oracle官网或其他可信源下载JDK 1.6的安装文件,如"jdk1.6.exe"。 - **安装**:双击执行安装文件,按照向导步骤进行安装,选择合适的安装路径。 - **环境变量设置**:安装完成后,需要在系统环境变量...
1.okhttp3.8源码使用jdk1.6重新编译,已集成了okio,在javaweb项目中使用,未在安卓项目中使用 2.okhttp3.8源码使用jdk1.6重新编译_okhttp3.8.0-jdk1.6.jar
aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-...
JDK1.6是Oracle公司发布的一个早期版本,虽然现在已有更新的版本如JDK 8、11或17,但有些老旧的项目可能仍依赖于这个版本。本文将深入探讨JDK1.6的特点、用途以及免安装版的优缺点。 首先,JDK1.6包含了Java编译器...
1. **性能优化**:JDK1.6对垃圾回收机制进行了改进,提升了程序运行时的性能;同时,对线程管理也做了优化,提高了多线程程序的执行效率。 2. **新API**:引入了一些新的API,如`java.nio`包中的新类`FileChannel`等...
JDK1.6相对于更早的版本,引入了一些新特性,如: - **泛型的改进**:增加了类型推断,使得泛型的使用更加方便。 - **并发工具的增强**:如ConcurrentHashMap、Fork/Join框架等,提升了多线程编程的效率和可维护性...
1. **改进的性能**:JDK 1.6通过优化JVM和类加载机制,提升了运行时的性能,尤其是对于大规模应用和并发处理。 2. **增强的内存管理**:包括更高效的垃圾回收机制,如并行垃圾回收和CMS(Concurrent Mark Sweep)...
这个版本在2006年发布,引入了许多新特性、增强功能以及性能优化,以提升开发者的效率和应用程序的性能。对于32位操作系统,它是专为那些运行在32位处理器架构上的系统设计的,比如Windows XP、Windows Vista或早期...
在IT行业中,集成开发环境(IDE)的选择对程序员...值得注意的是,随着技术的发展,JDK的更新版本,如JDK 8、11等,通常会包含更多的新特性和性能优化,因此在实际开发中,根据项目需求选择合适的JDK版本也是很重要的。
《OkHttp3.8.0-JDK1.6:低版本环境下的高效网络通信库》 OkHttp3.8.0-jdk1.6.zip是一个专门为Java Web项目设计的网络通信库,它针对JDK1.6进行了优化和重新编译,确保在较低版本的Java环境中也能稳定运行。OkHttp,...
8. **国际化和本地化**:JDK 1.6在处理全球化和本地化方面做了很多改进,支持更多的语言和地区设置。 9. **Java Web Start和Applet的增强**:提高了Java Web Start应用程序和Applet的启动速度,同时增强了安全性和...
它在2006年发布,引入了许多新特性,包括改进的垃圾回收算法、更好的性能优化、增强的Swing组件、新的XML处理API(如JAXB 2.0)以及对JavaScript的支持(通过 Rhino 引擎)。对于开发者来说,JDK1.6提供了一个稳定的...
IBM JDK与Oracle的JDK相比,提供了许多特定的性能优化和特性,尤其在服务器端计算环境中。 IBM JDK 1.6的主要组成部分包括: 1. **Java虚拟机(JVM)**:这是Java程序运行的基础,负责解释和执行字节码。IBM的JVM...
JDK1.6新特性说明.doc