`
javamonkey
  • 浏览: 168789 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Beetl 性能揭秘 1 :如何输出一个整型变量

阅读更多

常规来说,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操作。难怪性能这么好!

分享到:
评论

相关推荐

    springboot+beetlsql使用案例

    springboot+beetlsql使用案例: 优点:(1) 无需注解,能自动使用大量的内置sql,快速完成增,删,改,查的功能 (2)数据模型支持Pojo,也支持Map/List这种快速模型,也支持混合模型 (3)SQL模板基于B eetl实现,更...

    springboot+beetl+beetlsql

    Beetl是一个强大的、高性能的、易用的Java模板引擎,它设计的目标是减少模板语言的学习成本,提高开发效率。Beetl语法简洁且接近自然语言,支持多种编程模型,如Java、JavaScript、Groovy等,使得视图层的编写更为...

    beetl 模板demo

    【标题】"beetl 模板demo"指的是一个基于Beetl模板引擎的示例项目,用于展示如何在Java Web应用中集成并使用Beetl。Beetl是一款强大的、高效的、易用的Java模板引擎,适用于各种类型的应用开发,尤其是Web应用。 ...

    spring boot+beetl+beetlsql源代码

    1. **创建Spring Boot项目**:使用Spring Initializr创建一个新的Spring Boot项目,选择所需的依赖,例如Web、JPA(或MyBatis,因为BeetlSQL可以与MyBatis一起工作)。 2. **添加Beetl和BeetlSQL依赖**:在`pom.xml...

    Beetl2.7.14中文文档.pdf

    Beetl模板引擎提供了一个全面、性能卓越且易于使用的解决方案,特别适合对性能和易用性要求高的Java Web项目。通过它的独特功能和设计,开发者可以快速构建模板,并实现高效、安全的Web内容展示。在使用过程中,...

    Beetl2.2.3 jar包

    综上所述,Beetl2.2.3作为一款视图层模板引擎,不仅具备强大的功能和优秀的性能,而且易于学习和使用,是Java Web开发中的一个理想选择。结合提供的源码和文档,开发者可以更高效地掌握并运用Beetl,提升项目的开发...

    Spring+SpringMVC+Beetl+Beetlsql+Shiro的开发框架源码

    3. **Beetl**:Beetl是一个高性能的模板引擎,它的设计目标是简洁、高效和易用。在SpringBlade中,Beetl用于生成动态HTML页面,它支持丰富的语法,可以方便地与Java对象进行交互,提供良好的用户体验。 4. **Beetl...

    beetl-core

    对于初学者来说,学习Beetl需要先通读基本用法,大部分内容都是讲解语法,因为语法与JavaScript类似,所以可以快速预览,但Beetl毕竟是专门针对模板设计的,因此还需要认真学习安全输出、标签和HTML标签、全局变量、...

    Beetl 模板语言使用指南

    - **总是使用GroupTemplate**:这是Beetl的一个核心类,用于管理模板的加载和解析。 - **允许优化**:通过编译模板为Class,提升性能。 - **自定义函数**:扩展模板语言的功能,满足特定需求。 - **格式化函数**:...

    Spring+SpringMVC+Ehcache+Shiro+BootStrap企业级开发平台

    1、后端 核心框架:Spring Framework 安全框架:Apache Shiro 视图框架:Spring MVC 服务端验证:Blade Validator 任务调度:Spring Task 持久层框架:beetlsql 模板引擎:beetl 数据库连接池:Alibaba ...

    beetl模版引擎文档

    Beetl是一个新一代Java模板引擎,其版本为2.7.18。与其他Java模板引擎相比,Beetl具备功能全面、语法直观、性能极高的特点,它还支持HTML标签,易于维护,特别适合于需要快速响应的大网站和复杂的CMS管理系统。Beetl...

    Springboot 集成Beetl模板

    Spring Boot是Java开发中的一个热门框架,它简化了配置并提供了快速开发的能力。而Beetl则是一款强大的、高性能的模板引擎,能够帮助开发者将动态数据与静态HTML模板结合,生成最终的网页。 首先,让我们了解Beetl...

    beetl-2.5.2-API文档-中文版.zip

    赠送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文档-...

    基于java的模板语言 Beetl.zip

    Java模板语言Beetl是一个强大的、高效的、易用的模板引擎,主要应用于Web开发中,用于将业务逻辑和视图层进行分离。它的设计目标是提供一个简洁、灵活且功能丰富的模板语法,使得开发者可以更加专注于页面的布局和...

    beetl模板语音教学

    - **简洁性**: 语法基于JavaScript的一个子集,易于掌握。 - **全面性**: 支持大多数流行的模板引擎的功能,比如FreeMarker。 - **高性能**: 在优化模式下,性能优于多数模板引擎。 - **创新性**: 提供了诸如自定义...

    Spring Boot集成Beetl简单demo

    本文将详细介绍如何在 Spring Boot 项目中集成 Beetl,并展示一个简单的使用案例。 ### 1. 安装与依赖 首先,你需要在你的项目中添加 Beetl 相关的依赖。如果你使用的是 Maven,可以在 `pom.xml` 文件中添加以下...

    Beetl 模版引擎

    Beetl是一种新一代模板引擎,它具有强大的功能和优异的性能,易于学习和使用。它支持多种web框架的整合,如SpringMVC、JFinal、Struts、Nutz、Jodd和Servlet等,并能够单独开发和测试模板,无需M和C部分的参与。...

    Beetl2.8中文文档

    Beetl是一款功能全面、语法直观、性能优越且易于维护的Java模板引擎,当前版本为2.8.3。相较于其他模板引擎,Beetl的语法与JavaScript类似,便于用户快速学习和掌握。其独特优势包括: 1. 功能完备性:Beetl不仅...

    Java模板语言 Beetl

    - **上下文对象**: Beetl提供了一个上下文对象,可以用来传递数据到模板中,方便数据共享。 4. **错误处理与调试** - **精确的错误定位**: 当模板出错时,Beetl能提供详细的错误信息,包括错误位置和错误原因,...

    BeetlSQL的基本调用

    BeetlSQL是一款高效、简洁、易用的Java ORM框架,它主要负责简化数据库操作,使得开发者能够更专注于业务逻辑的实现,而无需过多关注底层的SQL语句编写。本篇将详细介绍BeetlSQL的基本调用以及如何实现基本的查询...

Global site tag (gtag.js) - Google Analytics