常规来说,IO流提供了输出字符串(字符数组)的功能,所以,通常的整型输出应该是这样的代码:String str = String.valueOf(12);
out.write(str);
对于模板引擎来说,输出整形变量很常见,事实上,这个地方有非常大的性能提高空间。我们只要分析这俩句话的源码,就能看出,如何提高io输出int性能。
对于第一句 String.valueOf 实际上调用了Integer.toString(int i) 方法,此方法原代码如下public static String toString(int i) {
if (i == Integer.MIN_VALUE)
return "-2147483648";
int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
char[] buf = new char[size];
getChars(i, size, buf);
return new String(buf, true);
}
我们注意到,代码第5行分配了一个数组,对于任何一个高效的java工具来说,这都是个告警消息,分配数组耗时,垃圾回收也耗时
我们在分析out.write(str);代码,对于输出一个字符串,必须将字符串先转为字符串数组( 看到问题没有,这又回去了),熟悉String源码的同学都知道,这仍然是一个耗时操作,我们看一下源代码:public char[] toCharArray() {
// Cannot use Arrays.copyOf because of class initialization order issues
char result[] = new char[value.length];
System.arraycopy(value, 0, result, 0, value.length);
return result;
}
如上代码,我们又发现了一次分配空间的操作,而且,还有一次字符串拷贝 System.arraycopy,这俩部又成了耗时操作
综合上面代码,我们就会发现,简单的一个int输出,除了基本的算法代码外,居然有俩次字符串的分配,还有一次数组copy。难怪性能低下(性能测试中确实这也是个消耗较多cpu的地方)。那么Beetl是如何改善的?
Beetl提供了一个专门的类IntIOWriter来处理字符串输出,如下关键代码片段:public static void writeInteger(ByteWriter bw, Integer i) throws IOException
{
if (i == Integer.MIN_VALUE)
{
bw.writeString("-2147483648");
return;
}
int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
char[] buf = bw.getLocalBuffer().getCharBuffer();
getChars(i, size, buf);
bw.writeNumberChars(buf, size);
}
如上代码,首先,我们可以看倒数第三行,并未分配字符素组,而是得到跟当前线程有关的一个char[]
其次,代码最后一行,直接就将此数组输出到IO流了,干净利索
综上所述,常规的输出int方法,除了常规算法外,需要俩次数组分配,和一次字符串拷贝操作。而Beetl则只需要常规算法即可输出,节省了俩次数组分配以及一次字符串copy操作。难怪性能这么好!
- 浏览: 166883 次
- 性别:
- 来自: 北京
最新评论
-
javamonkey:
https://my.oschina.net/xiandafu ...
beetl功能与Freemarker功能比较 -
laj76333:
支持标签嵌套吗?<%{}%><%{}%> ...
beetl功能与Freemarker功能比较 -
javamonkey:
支持,去ibeetl.com 上了解吧
beetl功能与Freemarker功能比较 -
laj76333:
支持标签吗?<%{}%><%{}%>& ...
beetl功能与Freemarker功能比较 -
酷沃哦:
beetl支持集群吗?
beetl功能与Freemarker功能比较
相关推荐
springboot+beetlsql使用案例: 优点:(1) 无需注解,能自动使用大量的内置sql,快速完成增,删,改,查的功能 (2)数据模型支持Pojo,也支持Map/List这种快速模型,也支持混合模型 (3)SQL模板基于B eetl实现,更...
1、后端 核心框架:Spring Framework 安全框架:Apache Shiro 视图框架:Spring MVC 服务端验证:Blade Validator 任务调度:Spring Task 持久层框架:beetlsql 模板引擎:beetl 数据库连接池:Alibaba ...
赠送jar包:beetl-2.5.2.jar; 赠送原API文档:beetl-2.5.2-javadoc.jar; 赠送源代码:beetl-2.5.2-sources.jar; 赠送Maven依赖信息文件:beetl-2.5.2.pom; 包含翻译后的API文档:beetl-2.5.2-javadoc-API文档-...
赠送jar包:beetlsql-2.6.7.jar; 赠送原API文档:beetlsql-2.6.7-javadoc.jar; 赠送源代码:beetlsql-2.6.7-sources.jar; 赠送Maven依赖信息文件:beetlsql-2.6.7.pom; 包含翻译后的API文档:beetlsql-2.6.7-...
beetl-spring-boot-starter,beetl 自动配置 Spring 启动。使用:从 maven 导入该库 <groupId>com.piggsoft</groupId> <artifactId>beetl-spring-boot-starter <version>0.0.1 配置 application....
使用springboot+beetl+beetsql+mysql集成的一个demo,实现增删改查,beetl模板调用。
每个层对应一个main方法,这里面所有的main执行完后,就生成结束了 5.当然,也可以不用我的,你们也可以根据需求修改成自己的工具 6.com.edu.cn.config下是一些重要的加载配置 7.com.edu.cn.otherUtil主要是输出文件...
1、后端 核心框架:Spring Framework、安全框架:Apache Shiro 视图框架:Spring MVC、服务端验证:Blade Validator 任务调度:Spring Task、持久层框架:beetlsql、模板引擎:beetl 数据库连接池:Alibaba ...
6个使用beetlsql实例源码,最近使用beetlsql越来越多,它的使用比mybatis更方便,所以这里特点写了几个练手的源码供大家学习使用
beetl-2.7.14.jar beetl-2.7.14.jar beetl-2.7.14.jar beetl-2.7.14.jar beetl-2.7.14.jar beetl-2.7.14.jar beetl-2.7.14.jar beetl-2.7.14.jar beetl-2.7.14.jar beetl-2.7.14.jar beetl-2.7.14.jar
springboot+beetl+mybatis
beetl模版引擎文档, 方法
springboot整合beetl/beetlsql,搭建springboot+beetl+beetlsql环境
BeetSql是一个全功能DAO工具,同时具有Hibernate 优点 & Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应用。 在开发效率上,无需注解,自动使用大量内置SQL,轻易完成增删...
赠送jar包:beetlsql-2.6.7.jar; 赠送原API文档:beetlsql-2.6.7-javadoc.jar; 赠送源代码:beetlsql-2.6.7-sources.jar; 赠送Maven依赖信息文件:beetlsql-2.6.7.pom; 包含翻译后的API文档:beetlsql-2.6.7-...
Beetl是一款6倍于Freemarker的超高性能的java模板引擎,来自于中国!!BeetlSQL是一款功能强大,以SQL为中心,使用简单的全功能的ORMapping工具,支持自动生成代码
/开发的一个简单的BBS, ^O^ 希望它作为一个JFinal, Beetl和Rythm入门的DEMO,可以帮到新人。 最后,向开源前辈们致敬。 部署完毕的效果地址是: 运行方法:导入sql,编译整个项目,配置相应的参数,运行Config.java...
SpringBoot集成Beetl的简单测试 @Configuration public class BeetlConfiguration { @Bean(initMethod = "init", name = "beetlConfig") public BeetlGroupUtilConfiguration getBeetlGroupUtilConfiguration...
Spring Boot集成Beetl简单demo,更加清晰用法。了解项目如何配置。
beetl模板语音教学,方便,不占内存,不信试试