zoukankan      html  css  js  c++  java
  • JProfiler的使用

    1.下载地址:http://www.ej-technologies.com/download/jprofiler/files

    2.使用过程

     

    1.点击此图的new Session

    2.点击左边application settings,右边要点击

    3.点击的Source Path ,点击+号的图标,点击add directory

     

    4.点击你工程的文件到bin

    5.左边是程序还没有运行的,右边是查询运行的

    6.点击你的项目双击俩下,或者点open,之后点击OK就好了

     7.点击CPU view,点击Call Tree,之后点击界面的一个按钮

    8.这是一张CUP的图,图中显示个个方法的使用占的CPU

    9.从中发现最大块的函数对其进行分解优化,以及减少代码块的重复率。

    下面举个例子:查重模块中调用到了diaoyong的方法,diaoyong方法调用到addcopy的方法,这样就把200行左右的代码分成了7个方法,每个方法的代码不多于50行。

     1.最大函数块

    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 查重的总函数
     * @author admin
     *
     */
    public class CongFu2 {
    	/**
    	 * 查重
    	 */
    	public  boolean chacong(List<String> timus,String yunsuan){
    		boolean flat=false;//获取是否重复的标记
    		boolean zhuzhifu=false;//在flat为true的时候,终止本次循环的标志
    		for(String s:timus){
    			if(!zhuzhifu){
    				List<String> str1=new ArrayList<String>();//获取已经存入在list中的题目
    				List<String> str2=new ArrayList<String>();//获取这次尝试的题目
    				for(int i=0;i<s.length();i++){
    					str1.add(s.charAt(i)+"");
    					str2.add(yunsuan.charAt(i)+"");
    				}
    				flat=false;
    				for(int i=0;i<str1.size();i++){
    					if(!str1.contains(str2.get(i))
    							||!str2.contains(str1.get(i))){
    						break;
    					}else{
    						if(i==str1.size()-1){
    							flat=true;
    						}
    					}
    				}
    				if(flat){
    					flat=false;
    					switch (str2.get(1)) {
    					case "+":
    						flat=false;
    						switch (str2.get(3)) {
    						case "+":
    							flat=true;
    							break;
    						case "-":
    							if(str2.get(4).equals(str1.get(4))
    									&&str2.get(3).equals(str1.get(3))
    									||str2.get(3).equals(str1.get(1))
    									&&str2.get(4).equals(str1.get(2))){
    								flat=true;
    							}
    							break;
    						case "/":
    							if(str2.get(2).equals(str1.get(2))
    									&&str2.get(3).equals(str1.get(3))
    									&&str2.get(4).equals(str1.get(4))
    									||str2.get(2).equals(str1.get(0))
    									&&str2.get(3).equals(str1.get(1))
    									&&str2.get(4).equals(str1.get(2))){
    								flat=true;
    							}
    							break;
    						default:
    							if(str2.get(0).equals(str1.get(0))
    									&&str2.get(1).equals(str1.get(1))
    									||str2.get(0).equals(str1.get(4))
    									&&str2.get(1).equals(str1.get(3))){
    								flat=true;
    							}
    							break;
    						}
    						break;
    					case "-":
    						flat=false;
    						switch (str2.get(3)) {
    						case "+":
    							if(str2.get(2).equals(str1.get(2))
    									&&str2.get(1).equals(str1.get(1))
    									||str2.get(1).equals(str1.get(3))
    									&&str2.get(2).equals(str1.get(4))){
    								flat=true;
    							}
    							break;
    						case "-":
    							if(str2.get(0).equals(str1.get(0))){
    								flat=true;
    							}
    							break;
    						case "/":
    							if(str2.get(0).equals(str1.get(0))
    									&&str2.get(2).equals(str1.get(2))
    									&&str2.get(1).equals(str1.get(1))){
    								flat=true;
    							}
    							break;
    						default:
    							if(str2.get(0).equals(str1.get(0))
    									&&str2.get(1).equals(str1.get(1))
    									||str2.get(0).equals(str1.get(4))
    									&&str2.get(1).equals(str1.get(3))){
    								flat=true;
    							}
    							break;
    						}
    						break;
    					case "/":
    						flat=false;
    						switch (str2.get(3)) {
    						case "*":
    							flat=true;
    							break;
    						case "/":
    							if(str2.get(4).equals(str1.get(4))
    									&&str2.get(3).equals(str1.get(3))
    									||str2.get(4).equals(str1.get(2))
    									&&str2.get(3).equals(str1.get(1))){
    								flat=true;
    							}
    							break;
    						case "+":
    							if(str2.get(4).equals(str1.get(4))
    									&&str2.get(3).equals(str1.get(3))
    									||str2.get(4).equals(str1.get(2))
    									&&str2.get(3).equals(str1.get(1))){
    								flat=true;
    							}
    							break;
    						default:
    							if(str2.get(3).equals(str1.get(3))
    									&&str2.get(4).equals(str1.get(4))){
    								flat=true;
    							}
    							break;
    						}
    						break;
    					default:
    						flat=false;
    						switch (str2.get(3)) {
    						case "*":
    							if(str2.get(2).equals(str1.get(2))
    									&&str2.get(1).equals(str1.get(1))
    									||str2.get(2).equals(str1.get(4))
    									&&str2.get(1).equals(str1.get(3))){
    								flat=true;
    							}
    							break;
    						case "/":
    							if(str2.get(0).equals(str1.get(0))){
    								flat=true;
    							}
    							break;
    						case "+":
    							if(str2.get(0).equals(str1.get(0))
    									&&str2.get(1).equals(str1.get(1))
    									&&str2.get(2).equals(str1.get(2))
    									||str2.get(0).equals(str1.get(2))
    									&&str2.get(1).equals(str1.get(3))
    									&&str2.get(2).equals(str1.get(4))){
    								flat=true;
    							}
    							break;
    						default:
    							if(str2.get(0).equals(str1.get(0))
    									&&str2.get(1).equals(str1.get(1))
    									&&str2.get(2).equals(str1.get(2))){
    								flat=true;
    							}
    							break;
    						}
    						break;
    					}
    					if(flat){
    						zhuzhifu=true;
    					}
    				}
    			}else{
    				break;
    			}
    		}
    		return flat;
    	}
    }
    

    2.优化后的  

    package com.jm.sizeyunsuan;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 查重的总函数
     * @author admin
     *
     */
    public class CongFu {
    	/**
    	 * 查重
    	 */
    	public  boolean chacong(List<String> timus,String yunsuan){
    		boolean flat=false;//获取是否重复的标记
    		boolean zhuzhifu=false;//在flat为true的时候,终止本次循环的标志
    		for(String s:timus){
    			if(!zhuzhifu){
    				List<String> str=new ArrayList<String>();//获取已经存入在list中的题目
    				List<String> str2=new ArrayList<String>();//获取这次尝试的题目
    				for(int i=0;i<s.length();i++){
    					str.add(s.charAt(i)+"");
    					str2.add(yunsuan.charAt(i)+"");
    				}
    				flat= same(str, str2);//查看符号数字是不是一样
    				if(flat){
    					flat=diaoYong(str,str2);//判断查重
    					if(flat){
    						zhuzhifu=true;
    					}
    				}
    			}else{
    				break;
    			}
    		}
    		return flat;
    	}
    	
    	/**
    	 * 为了减少代码块的过多抽取调用的方法
    	 * @param str list中的题目
    	 * @param str2 现在产生的题目
    	 * @return
    	 */
    	public boolean diaoYong(List<String> str,List<String> str2 ){
    		CongFuAddAndJian aj=new CongFuAddAndJian();
    		CongFuChengAndChu cc=new CongFuChengAndChu();
    		boolean flat=false;
    		switch (str2.get(1)) {
    		case "+":
    			flat=aj.addcopy(str,str2);
    			break;
    		case "-":
    			flat=aj.jiancopy(str,str2);
    			break;
    		case "/":
    			flat=cc.chucopy(str,str2);
    			break;
    		default:
    			flat=cc.chengcopy(str,str2);
    			break;
    		}
    		return flat;
    	}
    	
    	/**
    	 * 符号数字一样
    	 * str1是题目
    	 * str2是本次产生的题目
    	 */
    	public  boolean same(List<String> str1,List<String> str2 ){
    		boolean flat=false;
    		for(int i=0;i<str1.size();i++){
    			if(!str1.contains(str2.get(i))
    					||!str2.contains(str1.get(i))){
    				break;
    			}else{
    				if(i==str1.size()-1){
    					flat=true;
    				}
    			}
    		}
    		return flat;
    	}
    }
    

      

    package com.jm.sizeyunsuan;
    
    import java.util.List;
    
    /**
     * 判断重复的第一个符号为加减的
     * @author 
     *
     */
    public class CongFuAddAndJian {
    	
    	/**
    	 * 第一个为加号判断重复
    	 * ||之前为符号位置的一致,||之后的为符号位置不同
    	 */
    	public  boolean addcopy(List<String> str1,List<String> str2){
    		boolean flat=false;
    		switch (str2.get(3)) {
    		case "+":
    			flat=true;
    			break;
    		case "-":
    			if(str2.get(4).equals(str1.get(4))
    					&&str2.get(3).equals(str1.get(3))
    					||str2.get(3).equals(str1.get(1))
    					&&str2.get(4).equals(str1.get(2))){
    				flat=true;
    			}
    			break;
    		case "/":
    			if(str2.get(2).equals(str1.get(2))
    					&&str2.get(3).equals(str1.get(3))
    					&&str2.get(4).equals(str1.get(4))
    					||str2.get(2).equals(str1.get(0))
    					&&str2.get(3).equals(str1.get(1))
    					&&str2.get(4).equals(str1.get(2))){
    				flat=true;
    			}
    			break;
    		default:
    			if(str2.get(0).equals(str1.get(0))
    					&&str2.get(1).equals(str1.get(1))
    					||str2.get(0).equals(str1.get(4))
    					&&str2.get(1).equals(str1.get(3))){
    				flat=true;
    			}
    			break;
    		}
    		return flat;
    	}
    	
    
    	/**
    	 * 第一个为减号判断重复
    	 * ||之前为符号位置的一致,||之后的为符号位置不同
    	 */
    	public  boolean jiancopy(List<String> str1,List<String> str2){
    		boolean flat=false;
    		switch (str2.get(3)) {
    		case "+":
    			if(str2.get(2).equals(str1.get(2))
    					&&str2.get(1).equals(str1.get(1))
    					||str2.get(1).equals(str1.get(3))
    					&&str2.get(2).equals(str1.get(4))){
    				flat=true;
    			}
    			break;
    		case "-":
    			if(str2.get(0).equals(str1.get(0))){
    				flat=true;
    			}
    			break;
    		case "/":
    			if(str2.get(0).equals(str1.get(0))
    					&&str2.get(2).equals(str1.get(2))
    					&&str2.get(1).equals(str1.get(1))){
    				flat=true;
    			}
    			break;
    		default:
    			if(str2.get(0).equals(str1.get(0))
    					&&str2.get(1).equals(str1.get(1))
    					||str2.get(0).equals(str1.get(4))
    					&&str2.get(1).equals(str1.get(3))){
    				flat=true;
    			}
    			break;
    		}
    		return flat;
    	}
    
    	
    }
    

      

    package com.jm.sizeyunsuan;
    
    import java.util.List;
    
    /**
     * 判断重复的第一个符号为乘除的
     * @author 
     *
     */
    public class CongFuChengAndChu {
    	/**
    	 * 第一个为乘法判断重复
    	 * ||之前为符号位置的一致,||之后的为符号位置不同
    	 */
    	public  boolean chengcopy(List<String> str1,List<String> str2){
    		boolean flat=false;
    		switch (str2.get(3)) {
    		case "*":
    			flat=true;
    			break;
    		case "/":
    			if(str2.get(4).equals(str1.get(4))
    					&&str2.get(3).equals(str1.get(3))
    					||str2.get(4).equals(str1.get(2))
    					&&str2.get(3).equals(str1.get(1))){
    				flat=true;
    			}
    			break;
    		case "+":
    			if(str2.get(4).equals(str1.get(4))
    					&&str2.get(3).equals(str1.get(3))
    					||str2.get(4).equals(str1.get(2))
    					&&str2.get(3).equals(str1.get(1))){
    				flat=true;
    			}
    			break;
    		default:
    			if(str2.get(3).equals(str1.get(3))
    					&&str2.get(4).equals(str1.get(4))){
    				flat=true;
    			}
    			break;
    		}
    		return flat;
    	}
    
    	/**
    	 * 第一个为除法判断重复
    	 * ||之前为符号位置的一致,||之后的为符号位置不同
    	 */
    	public  boolean chucopy(List<String> str1,List<String> str2){
    		boolean flat=false;
    		switch (str2.get(3)) {
    		case "*":
    			if(str2.get(2).equals(str1.get(2))
    					&&str2.get(1).equals(str1.get(1))
    					||str2.get(2).equals(str1.get(4))
    					&&str2.get(1).equals(str1.get(3))){
    				flat=true;
    			}
    			break;
    		case "/":
    			if(str2.get(0).equals(str1.get(0))){
    				flat=true;
    			}
    			break;
    		case "+":
    			if(str2.get(0).equals(str1.get(0))
    					&&str2.get(1).equals(str1.get(1))
    					&&str2.get(2).equals(str1.get(2))
    					||str2.get(0).equals(str1.get(2))
    					&&str2.get(1).equals(str1.get(3))
    					&&str2.get(2).equals(str1.get(4))){
    				flat=true;
    			}
    			break;
    		default:
    			if(str2.get(0).equals(str1.get(0))
    					&&str2.get(1).equals(str1.get(1))
    					&&str2.get(2).equals(str1.get(2))){
    				flat=true;
    			}
    			break;
    		}
    		return flat;
    	}
    
    }
    

      

  • 相关阅读:
    ORACLE 日期格式
    Oracle 12c release 2的安装
    InstantClient+PLSQL安装配置教程
    POSTMAN打印日志与json文件传参
    POSTMAN Request的几个要素
    Python+selenium处理滚动条
    Keys 类键盘操作的常用方法
    ActionChains类鼠标操作的常用方法
    Python+webdriver 文件上传自动化
    【SDOI2011】染色
  • 原文地址:https://www.cnblogs.com/ysh09-04/p/8793641.html
Copyright © 2011-2022 走看看