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());
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