HotSpot中执行引擎技术详解(一)——分阶段代码

作者:足球

近期室友在玩FIFA World Cup的揣测,作者顺手写点深入分析;上边直接提交代码,很简短的,拷贝代码间接存为html文件就能够了。---------mq0036

在HotSpot里面,代码施行有二种方式:

1.怎么着是工作代码?

直白用来落到实处客户必要的代码正是专业代码,举个例子客户须要查询某些数据,那么直接查询数据库,重回结果的代码,正是职业代码。

表明下:必要你和谐去找个Jquery援用到眼下页面就足以了

  1. 一贯表达指令:那使用的是HotSpot的解说引擎,它使用模板解释,将每一条指令直接翻译花费地代码,而后由硬件直接施行;
  2. 编写翻译施行:是指,将代码直接翻译花费地代码推行,那正是收放自如的JIT编写翻译器,更纯粹的乃是HotSpot Compiler;

2.如何是非职业代码?

扶助职业代码,平日能够退出业务而存在的代码,比如客商查询某些数据,接收顾客输入或者出现中文乱码,那时化解普通话乱码的代码并不直接包括在顾客的目的中,能够脱离当前政工,应用于其余业务中,这一代码就是非业务代码。

<html>
<head>

<script src="jquery-1.4.2.min.js"></script>

<script>

function js()
{
    //$("tr").children("td")[3].css("background-color","red");
    //$("#td1").css("background-color","#516831");

    var a=b=c=0;

    a=$("#z").val();
    b=$("#k").val();
    c=$("#r").val();

    $("#rqs").html(c);

    if(a>b)setcolor("td1");
    if(a==b)setcolor("td2");
    if(a<b)setcolor("td3");

    if(a+c>b)setcolor("rtd1");
    if(a+c==b)setcolor("rtd2");
    if(a+c<b)setcolor("rtd3");
}


function setcolor(id){
    $("#"+id).css("background-color","#516831");
}

$("#b1").hide();

function zh(){
    var str="",str2="";
    var a1=0,a2=0,b1=0,b2=0,c=0;

    a1=$("#z1").val();
    a2=$("#z2").val();
    b1=$("#k1").val();
    b2=$("#k2").val();
    c=$("#r").val();

    $("#chk").html("");
    $("#chk").append('胜<input type=checkbox value=s checked=checked onclick="chk()" /> 负<input checked=checked type=checkbox value=f onclick="chk()"/> 平<input checked=checked type=checkbox value=p onclick="chk()" />');
    $("#chk").append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
    $("#chk").append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
    $("#chk").append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
    $("#chk").append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");

    var spf;
    for(i=a1;i<=a2;i++){
        for(j=b1;j<=b2;j++){

            if((1*i)>j)spf="s";
            if((1*i)==j)spf="p";
            if((1*i)<j)spf="f";

            str += "<tr class='"+spf+"'><td>"+i+"&nbsp;</td><td>"+j+"&nbsp;</td>";
            if(i>j){str += "<td style='background-color:#516831;'>&nbsp;</td>"}else{str += "<td>&nbsp;</td>";}
            if(i==j){str += "<td style='background-color:#516831;'>&nbsp;</td>"}else{str += "<td>&nbsp;</td>";}
            if(i<j){str += "<td style='background-color:#516831;'>&nbsp;</td>"}else{str += "<td>&nbsp;</td>";}
            str += "<td>&nbsp;"+c+"</td>";

            //alert("i="+i+" j="+j+","+(1*i+c*1)+"n(i+c)>j :" +((i+c)>j));
            if((1*i+c*1)>j){str += "<td style='background-color:#516831;'>&nbsp;</td>"}else{str += "<td>&nbsp;</td>";}
            if((1*i+c*1)==j){str += "<td style='background-color:#516831;'>&nbsp;</td>"}else{str += "<td>&nbsp;</td>";}
            if((1*i+c*1)<j){str += "<td style='background-color:#516831;'>&nbsp;</td>"}else{str += "<td>&nbsp;</td>";}
            str+="</tr>";



            str2 += "<tr id='1_"+i+j+"' class='"+spf+"2'><td  rowspan='2'>"+i+"&nbsp;</td><td rowspan='2'>"+j+"&nbsp;</td><td>0</td>";
            if(i>j){str2 += "<td style='background-color:#516831;'>&nbsp;</td>"}else{str2 += "<td>&nbsp;</td>";}
            if(i==j){str2 += "<td style='background-color:#516831;'>&nbsp;</td>"}else{str2 += "<td>&nbsp;</td>";}
            if(i<j){str2 += "<td style='background-color:#516831;'>&nbsp;</td>"}else{str2 += "<td>&nbsp;</td>";}
            str2 += "</tr><tr  id='2_"+i+j+"' class='"+spf+"2'>";
            str2 += "<td>&nbsp;"+c+"</td>";
            if((1*i+c*1)>j){str2 += "<td style='background-color:#516831;'>&nbsp;</td>"}else{str2 += "<td>&nbsp;</td>";}
            if((1*i+c*1)==j){str2 += "<td style='background-color:#516831;'>&nbsp;</td>"}else{str2 += "<td>&nbsp;</td>";}
            if((1*i+c*1)<j){str2 += "<td style='background-color:#516831;'>&nbsp;</td>"}else{str2 += "<td>&nbsp;</td>";}
            str2+="</tr>";

            $("#chk").append(i+":"+j+"<input id="+i+j+" type=checkbox i="+i+"   j="+j+" checked onclick='chk()' /> &nbsp;");
        }
    }


    $("#pp1").html("");
    $("#pp2").html("");
    $("#pp1").append(str);
    $("#pp2").append(str2);

    $('input[type="checkbox"]:checked').each(
                function() {
                    $(this).attr("checked","true");
                }
            );
}



function chk()
{
$(".s").hide();
$(".p").hide();
$(".f").hide();

$(".s2").hide();
$(".p2").hide();
$(".f2").hide();

//$("#s3").hide();
//$("#p3").hide();
//$("#f3").hide();

//$(".sh").hide();


$('input[type="checkbox"]:checked').each(
                function() {
                       $("."+$(this).val()).show(); 
                       //alert($(this).attr("i")+$(this).attr("i"));
                       //alert($(this).attr("id"));
                       //$("."+$(this).val()+"2").show(); 
                       $("#1_"+$(this).attr("i")+$(this).attr("j")).show(); 
                       $("#2_"+$(this).attr("i")+$(this).attr("j")).show(); 
                }
            );
}



</script>




</head>
<body>
主队:<input id='z' type=text /> 客队:<input id='k' type=text />
让球:<input id='r' type=text value="-1" />

<button id='b1' style="display:none"  onclick="js();">计算</button>
<br />
主队:从<input id='z1' type=text style="width:40px" value="0" /> 到 <input id='z2' value="2" type=text style="width:40px" >&nbsp;&nbsp;
客队:从<input id='k1' type=text style="width:40px"  value="0"/> 到 <input id='k2' value="2" type=text style="width:40px" >
<button id='b1' onclick="zh();">计算所有组合</button>
<button id='b1' onclick="alert($('#sc').html());">计算所有组合</button>
<br /><br />
<div id='chk'>
胜<input type=checkbox value=s onclick="chk()" /> 
负<input type=checkbox value=f onclick="chk()"/>
平<input type=checkbox value=p onclick="chk()" />
</div>
<br />

<table id='tab'>
    <tr>
        <th class="fs16 br0" colspan="2">对阵</th>
        <th class="fs16 br0" colspan="3">胜平负</th>
        <th class="fs16" colspan="4">让球胜平负</th>
    </tr>
    <tr>
        <th class="t1 bt0">主队</th>
        <th class="t1 br0 bt0">客队</th>
        <th class="t3 br1 bt0">主胜</th>
        <th class="t3 br1 bt0">平局</th>
        <th class="t3 br0 bt0">主负</th>
        <th class="t3 br1 bt0 concede">让球</th>
        <th class="t3 br1 bt0">主胜</th>
        <th class="t3 br1 bt0">平局</th>
        <th class="t3 br0 bt0">主负</th>
    </tr>
    <tbody id="pp1">
    <tr>
        <td>主队</td>
        <td>客队</td>
        <td id=td1>&nbsp;</td>
        <td id=td2>&nbsp;</td>
        <td id=td3>&nbsp;</td>
        <td id=rqs>&nbsp;</td>
        <td id=rtd1>&nbsp;</td>
        <td id=rtd2>&nbsp;</td>
        <td id=rtd3>&nbsp;</td>
    </tr>
    </tbody>
</table>

<br /><br />

<table id='tab2' style="width:300px;left:450px;">
    <tr>
        <th class="fs16 br0" colspan="2">对阵</th>
        <th class="fs16" colspan="4">让球胜平负</th>
    </tr>
    <tr>
        <th class="t1 bt0">主队</th>
        <th class="t1 br0">客队</th>
        <th class="t3 br1 bt0 concede">让球</th>
        <th class="t3 br1 bt0">主胜</th>
        <th class="t3 br1 bt0">平局</th>
        <th class="t3 br0 bt0">主负</th>
    </tr>
    <tbody id="pp2">
    <tr class=sh>
        <td rowspan="2">主队</td>
        <td rowspan="2">客队</td>
        <td id=td1>&nbsp;</td>
        <td id=td2>&nbsp;</td>
        <td id=td3>&nbsp;</td>
        <td id=td3>&nbsp;</td>
    </tr>
    <tr class=sh>
        <td id=rqs>&nbsp;</td>
        <td id=rtd1>&nbsp;</td>
        <td id=rtd2>&nbsp;</td>
        <td id=rtd3>&nbsp;</td>
    </tr>
    </tbody>
</table>


</body>
</html>


<style>

table
{    border-width:1px;
    border-color:#f00;
    border-style:solid;
    text-align:center;
    font-Size:12px;
    width:400px;
    position: absolute;
    top:110px;
}
th{
    border-width:thin;
    border-color:#f00;
    border-style:solid;
    height:25px;
}

td
{    border-width:1px;
    border-color:#f00;
    border-style:solid;
    text-align:center;
    font-Size:12px;
}

</style>

HotSpot选拔两种方式混合的宏图,首假如由于对质量的设想。这种天性是用七个目标来衡量的:

HotSpot中执行引擎技术详解(一)——分阶段代码执行威尼斯城真人赌钱网站。3.区分业务代码与非业务代码的专门的职业

是或不是被目标间接针对,是或不是足以脱离实际作业而存在。

 

  • 开发银行时间:是指,将代码间接编写翻译开支地代码时的时辰;
  • 稳态品质:是指一条指令被施行的平分速度,日常选用每条指令施行的时刻来度量;

4.区分业务代码与非业务代码的指标

差异业务代码与非业务代码的目标是使将业务代码与非业务代码分开,使业务代码尤其简明,档期的顺序尤其鲜明,升高内聚度,便于专门的职业代码维护与复用。

对此任何叁个前后相继,恐怕说一段代码来说:
*实施时间=指令个数稳态品质+运转时间
为此,假使一味使用第一种实践形式,那么运行时间差比相当少未有,然则稳态品质会比较倒霉。即就是运用模板解释器,每一条指令都要由此取码、译码、翻译、推行多少个经过,耗费时间很短;而在独有使用第三种形式的场馆下,运维时间长,然而每一条的授命推行,也正是多条地方代码指令的实施,进程特出连忙。

5.别离业务代码与非业务代码的手法

  • 将非业务代码放在过滤器Filter中。
  • 将非业务代码放在拦截器Interceptor中。
  • 遵循AOP思想,将非业务代码放在切面中。

本文由威尼斯城真人赌钱网站发布,转载请注明来源

关键词: