Runtime类测试String VS StringBuffer VS StringBuilder 报告

Runtime类简介:
表示运行时操作类,和JVM混的不错,关系过硬。封装了JVM进程,每一个JVM对应着一个Runtime类的实例,且由JVM运行时为其实例化。
你不会在JDK文档中查到他的任何构造方法定义,因为他本身的构造方法是私有化(private单例设计),所以不能创建他自己的(分身)实例。如果你想找到他的一个分身(实例),通过下面的方式吧:
Runtime run = Runtime.getRuntime();
从上面的方法你可以知道这个getRuntime()方法是个静态的方法,这样你就可以取得-->一些系统的信息

public class Test {
    public static void main(String []agrs) {
        //Runtime run = new Runtime.getRuntime();    // 错误!不能用 new 
        Runtime run = Runtime.getRuntime();    // 通过 Runtime 的静态方法获得实例
        // 获得最大内存,不同机器不同值
        System.out.println("JVM最大内容为:" + run.maxMemory());
        
        // 取得循环程序运行前最大空闲内存
        System.out.println("JVM最大空闲内容为:" + run.freeMemory());
//******************使用Sting**********************//
/*        
        String str = "Hello" + "World" + "!!!" + "zhangze" + "sb";
        System.out.println(str);
        for (int i = 1; i < 100; i++) {r
            str = str + i;
        }
*/
//******************改用StringBuffer后性能提升********************//
        StringBuffer buf = new StringBuffer();
        buf.append("Hello").append("World").append("!!!").append("zhangze").append("sb");
        System.out.println(buf);
        for (int i = 1; i < 100; i++) {
            buf.append(i);
        }
        // 取得循环程序运行后最大空闲内存
        System.out.println("操作String后JVM最大空闲内容为:" + run.freeMemory());
        run.gc();
        System.out.println("垃圾回收后JVM最大空闲内容为:" + run.freeMemory());
        
//******************改用StringBuilder后性能提升********************//
//        StringBuilder builder = new StringBuilder();
//        builder.append("Hello").append("World").append("!!!").append("zhangze").append("sb");
//        System.out.println(builder);
//        for (int i = 1; i < 100; i++) {
//            builder.append(i);
//        }
//        // 取得循环程序运行后最大空闲内存
//        System.out.println("操作String后JVM最大空闲内容为:" + run.freeMemory());
//        run.gc();
//        System.out.println("垃圾回收后JVM最大空闲内容为:" + run.freeMemory());
    }
}



-->在我机器上的运行结果:

JVM最大内容为:259522560
JVM最大空闲内容为:15932144
HelloWorld!!!zhangzesb
操作String后JVM最大空闲内容为:15841304
垃圾回收后JVM最大空闲内容为:16073584


//************************改用StringBuffer后性能提升************************/

JVM最大内容为:259522560
JVM最大空闲内容为:15932144
HelloWorld!!!zhangzesb
操作StringBuffer后JVM最大空闲内容为:15932144
垃圾回收后JVM最大空闲内容为:16073448


计算得性能提升: 15932144-15841304=908406 B(科学就是要这么较真^_^)

-->

1/StringBuffer类的应用,适用于对于频繁修改字符串内容的地方,较String类能提升代码性能。

2/如果我们的程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类

精典按条件查询的sql语句:

StringBuilder sql = new StringBuilder("select * from (select s.register_id,s.examnum,s.clazzname,s.studentid,s.studentname,s.schoolzonename,s.sex,s.stature,s.sizes,s.bust,s.waistline,s.hipline,s.register_date,s.s_cost_type,s.s_is_grant, rownum rm from stu_uniform_info s where 1=1");
		if (schoolName != null && !"".equals(schoolName)) {
			sql.append(" and s.schoolzonename like '%").append(schoolName).append("%'");
		}
		if (studentName != null && !"".equals(studentName)) {
			sql.append(" and s.studentname like '%").append(studentName).append("%'");
		}
		if (clazzName != null && !"".equals(clazzName)) {
			sql.append(" and s.classname like '%").append(clazzName).append("%'");
		}
		if (size != null && !"".equals(size)) {
			sql.append(" and s.sizes = '").append(size).append("'");
		}
sql.append(") where rm >= ("+nowPage+"-1)*"+pageSum+"+1 and rm <= "+nowPage+" * "+pageSum);
        Session session = sessionFactory.getCurrentSession();
        SQLQuery query = session.createSQLQuery(sql.toString());




-->Runtime类除了观察内存使用量外,也可以结合Process类直接用于运行本机的可执行程序,eg: 记事本程序的执行命令是“notepad.exe”,则下面程序可以让记事本程序运行5 秒后消失。

package zz.runtimedemo;
public class RuntimeDemo02 {
	public static void main(String []args) {
		Runtime run = Runtime.getRuntime();
		Process pro = null;
		try{
			pro = run.exec("notepad.exe");	// 调用本机程序(记事本程序),必须进行异常处理
		} catch (Exception e){
			e.printStackTrace();
		}
		try {
			//pro.sleep(5000);	// 错误!sleep()的调用对象肯定是线程
			Thread.sleep(5000);	// 让此程序存活5秒
		} catch (Exception e){
			e.printStackTrace();
		}
		pro.destroy();	// 结束此进程
	}
}


延伸:

1、单例设计模式(Singleton Pattern)

2、Prototype模式:http://blog.csdn.net/hai8902882/article/details/8034621#comments



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值