??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩亚洲变态另类中文,亚洲国产成人手机在线电影bd ,亚洲av无码久久忘忧草http://www.tkk7.com/yaoyaojj/yaoyaozh-cnSat, 10 May 2025 10:19:11 GMTSat, 10 May 2025 10:19:11 GMT60java虚拟机内存的堆区QheapQ,栈区QstackQ和静态区Qstatic/methodQ?/title><link>http://www.tkk7.com/yaoyaojj/archive/2011/07/31/355438.html</link><dc:creator>水木清华77</dc:creator><author>水木清华77</author><pubDate>Sun, 31 Jul 2011 06:51:00 GMT</pubDate><guid>http://www.tkk7.com/yaoyaojj/archive/2011/07/31/355438.html</guid><wfw:comment>http://www.tkk7.com/yaoyaojj/comments/355438.html</wfw:comment><comments>http://www.tkk7.com/yaoyaojj/archive/2011/07/31/355438.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/yaoyaojj/comments/commentRss/355438.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/yaoyaojj/services/trackbacks/355438.html</trackback:ping><description><![CDATA[<div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">JAVA的JVM的内存可分ؓ3个区Q堆(heap)、栈(stack)和方法区(method)<br /><br />堆区:<br /></span><span style="color: #000000; ">1</span><span style="color: #000000; ">.存储的全部是对象Q每个对象都包含一个与之对应的class的信息?class的目的是得到操作指o)<br /></span><span style="color: #000000; ">2</span><span style="color: #000000; ">.jvm只有一个堆?heap)被所有线E共享,堆中不存攑֟本类型和对象引用Q只存放对象本n.<br /><br /></span><span style="color: #000000; ">3</span><span style="color: #000000; ">.一般由E序员分配释放, 若程序员不释放,E序l束时可能由OS回收 ?br /><br />栈区:<br /></span><span style="color: #000000; ">1</span><span style="color: #000000; ">.每个U程包含一个栈区,栈中只保存基数据cd的对象和自定义对象的引用(不是对象)Q对象都存放在堆Z<br /></span><span style="color: #000000; ">2</span><span style="color: #000000; ">.每个栈中的数?原始cd和对象引?都是U有的,其他栈不能访问?br /></span><span style="color: #000000; ">3</span><span style="color: #000000; ">.栈分?个部分:基本cd变量区、执行环境上下文、操作指令区(存放操作指o)?br /><br /><br /></span><span style="color: #000000; ">4</span><span style="color: #000000; ">.q译器自动分配释放 Q存攑և数的参数|局部变量的值等Q?br /><br /> <br /><br /> <br /><br /> <br /><br />静态区</span><span style="color: #000000; ">/</span><span style="color: #000000; ">Ҏ?<br /></span><span style="color: #000000; ">1</span><span style="color: #000000; ">.Ҏ区又叫静态区Q跟堆一P被所有的U程׃n。方法区包含所有的class和static变量?br /></span><span style="color: #000000; ">2</span><span style="color: #000000; ">.ҎZ包含的都是在整个E序中永q唯一的元素,如classQstatic变量?br /><br /></span><span style="color: #000000; ">3</span><span style="color: #000000; ">.—Q全局变量和静态变量的存储是放在一块的Q初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在盔R的另一块区域?br /><br /><br />代码实例Q{自网l)<br /><br />AppMain.java<br /> </span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">   </span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">  AppMain </span><span style="color: #008000; ">//</span><span style="color: #008000; ">q行? jvm 把appmain的信息都攑օҎ?/span><span style="color: #008000; "><br /></span><span style="color: #000000; ">{<br />    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">   </span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">   </span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">  main(String[] args)  </span><span style="color: #008000; ">//</span><span style="color: #008000; ">main Ҏ本n攑օҎ区?/span><span style="color: #008000; "><br /></span><span style="color: #000000; ">    {<br />         Sample test1 </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">  Sample( </span><span style="color: #000000; ">"</span><span style="color: #000000; "> 试1 </span><span style="color: #000000; ">"</span><span style="color: #000000; "> );   </span><span style="color: #008000; ">//</span><span style="color: #008000; ">test1是引用,所以放到栈区里Q?nbsp;Sample是自定义对象应该攑ֈ堆里?/span><span style="color: #008000; "><br /></span><span style="color: #000000; ">          Sample test2 </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">  Sample( </span><span style="color: #000000; ">"</span><span style="color: #000000; "> 试2 </span><span style="color: #000000; ">"</span><span style="color: #000000; "> );<br /><br />         test1.printName();<br />         test2.printName();<br />    }<br />}<br /><br />Sample.java<br /><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">   </span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">  Sample </span><span style="color: #008000; ">//</span><span style="color: #008000; ">q行? jvm 把appmain的信息都攑օҎ?/span><span style="color: #008000; "><br /></span><span style="color: #000000; ">{<br />     </span><span style="color: #008000; ">/**</span><span style="color: #008000; "> 范例名称 </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />     </span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">  name; </span><span style="color: #008000; ">//</span><span style="color: #008000; ">new Sample实例后, name 引用攑օ栈区里,  name 对象攑օ堆里</span><span style="color: #008000; "><br /></span><span style="color: #000000; "><br />      </span><span style="color: #008000; ">/**</span><span style="color: #008000; "> 构造方?nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />     </span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">  Sample(String name)<br />     {<br />          </span><span style="color: #0000FF; ">this</span><span style="color: #000000; "> .name </span><span style="color: #000000; ">=</span><span style="color: #000000; "> name;<br />     }<br /><br />     </span><span style="color: #008000; ">/**</span><span style="color: #008000; "> 输出 </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />     </span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">   </span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">  printName()   </span><span style="color: #008000; ">//</span><span style="color: #008000; ">printҎ本n攑օ Ҏ区里?/span><span style="color: #008000; "><br /></span><span style="color: #000000; ">     {<br />         System.out.println(name);<br />     }<br />}<br /><br />代码的执行过E:<img src="http://www.tkk7.com/images/blogjava_net/yaoyaojj/0_1302327673i3Z0.gif" width="554" height="325" alt="" /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">pȝ收到了我们发出的指oQ启动了一个Java虚拟E,q个q程首先从classpath中找到AppMain.class文gQ读取这个文件中的二q制数据Q然后把AppmaincȝcM息存攑ֈq行时数据区的方法区中。这一q程UCؓAppMaincȝ加蝲q程?br />接着QJava虚拟机定位到ҎZAppMaincȝMain()Ҏ的字节码Q开始执行它的指令。这个main()Ҏ的第一条语句就是:<br />Sample test1</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> Sample(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">试1</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /><br /><br />语句很简单啦Q就是让java虚拟机创Z个Sample实例Qƈ且呢Q引用变量test1引用q个实例。貌似小case一桩哦Q就让我们来跟踪一下Java虚拟机,看看它究竟是怎么来执行这个Q务的Q?br /><br /><br /></span><span style="color: #000000; ">1</span><span style="color: #000000; ">?nbsp;Java虚拟Z看,不就是徏立一个Sample实例吗,单,于是q奔方法区而去Q先扑ֈSamplecȝcd信息再说。结果呢Q嘿嘿,没找到@@Q这会儿的方法区里还没有Samplecd。可Java虚拟Z不是一根筋的笨蛋,于是Q它发扬“自己动手Q丰?#8221;的作风,立马加蝲了Samplec,把Samplecȝcd信息存放在方法区里?br /><br /><br /></span><span style="color: #000000; ">2</span><span style="color: #000000; ">?nbsp;好啦Q资料找CQ下面就开始干zd。Java虚拟机做的第一件事情就是在堆区中ؓ一个新的Sample实例分配内存, q个Sample实例持有着指向Ҏ区的Samplecȝcd信息的引用。这里所说的引用Q实际上指的是Samplecȝcd信息在方法区中的内存地址Q其实,是有点cM于C语言里的指针?/span><span style="color: #000000; ">~~</span><span style="color: #000000; ">Q而这个地址呢,存放了在Sample实例的数据区里?br /><br /> <br /> <br /><br /> <br /></span><span style="color: #000000; ">3</span><span style="color: #000000; ">?nbsp;在JAVA虚拟E中Q每个线E都会拥有一个方法调用栈Q用来跟t线E运行中一pd的方法调用过E,栈中的每一个元素就被称为栈帧,每当U程调用一个方法的时候就会向Ҏ栈压入一个新帧。这里的帧用来存储方法的参数、局部变量和q算q程中的临时数据。OKQ原理讲完了Q就让我们来l箋我们的跟t行动!位于“</span><span style="color: #000000; ">=</span><span style="color: #000000; ">”前的Test1是一个在main()Ҏ中定义的变量Q可见,它是一个局部变量,因此Q它被会dC执行main()Ҏ的主U程的JAVAҎ调用栈中。?#8220;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">”把q个test1变量指向堆区中的Sample实例Q也是_它持有指向Sample实例的引用?br />OKQ到q里为止呢,JAVA虚拟机就完成了这个简单语句的执行d。参考我们的行动向导图,我们l于初步摸清了JAVA虚拟机的一点点底细了,COOLQ?br />接下来,JAVA虚拟机将l箋执行后箋指oQ在堆区里l创建另一个Sample实例Q然后依ơ执行它们的printName()Ҏ。当JAVA虚拟机执行test1.printName()ҎӞJAVA虚拟机根据局部变量test1持有的引用,定位到堆Z的Sample实例Q再ҎSample实例持有的引用,定位到方法去中Samplecȝcd信息Q从而获得printName()Ҏ的字节码Q接着执行printName()Ҏ包含的指令?br /><br /> ?/span></div><a >http://blog.csdn.net/lyerliu/article/details/6311709</a></span></div><img src ="http://www.tkk7.com/yaoyaojj/aggbug/355438.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/yaoyaojj/" target="_blank">水木清华77</a> 2011-07-31 14:51 <a href="http://www.tkk7.com/yaoyaojj/archive/2011/07/31/355438.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>八皇后问题的解决http://www.tkk7.com/yaoyaojj/archive/2011/07/04/353623.html水木清华77水木清华77Mon, 04 Jul 2011 03:05:00 GMThttp://www.tkk7.com/yaoyaojj/archive/2011/07/04/353623.htmlhttp://www.tkk7.com/yaoyaojj/comments/353623.htmlhttp://www.tkk7.com/yaoyaojj/archive/2011/07/04/353623.html#Feedback0http://www.tkk7.com/yaoyaojj/comments/commentRss/353623.htmlhttp://www.tkk7.com/yaoyaojj/services/trackbacks/353623.html
 1 package algorithm;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 public class Queen {
 7     private int count = 0;
 8 
 9     public static void main(String[] args) {
10         long start = System.currentTimeMillis();
11         List<Integer> list = new ArrayList<Integer>();
12         Queen queen = new Queen();
13         queen.findMyQueen(list);
14 
15         long end = System.currentTimeMillis();
16         System.out.println("搜烦旉"+(end - start)+"ms");
17         System.out.println("d解法"+queen.count);
18     }
19 
20     /**
21      * 建立一个队?nbsp;list 用于存放八个皇后
22      */
23     public void findMyQueen(List<Integer> list) {
24 
25         if (list.size() == 8) {
26             count++;
27             System.out.println("W?/span>" + count + "l?/span>");
28             for (int queen : list) {
29 
30                 for (int k = 0; k < 8; k++) {
31                     if ((queen >> k) == 1) {
32                         System.out.print(" Q ");
33                     } else {
34                         System.out.print(" . ");
35                     }
36                 }
37                 System.out.println();
38 
39             }
40 
41             return;
42         }
43         for (int i = 0; i < 8; i++) {
44             /**
45              * 清理list
46              */
47 
48             int myQueen = 1 << i;
49             if (list.size() == 0) {// 如果的长度是0的话 初始状?/span>
50                 list.add(myQueen);
51                 int size = list.size();
52                 findMyQueen(list);
53                 clear(list, size);
54             } else {
55                 int isFind = 1;
56                 for (int j = 0; j < list.size(); j++) {
57                     int queen = list.get(j);
58                     if ((queen & myQueen) != 0) {
59                         isFind = 0;
60                         break;
61                     }
62                     if (queen != (1 << 7)) {
63                         int queenLeft = queen << (list.size() - j);
64                         if (queenLeft <= (1 << 7))
65                             if ((queenLeft & myQueen) != 0) {
66 
67                                 isFind = 0;
68                                 break;
69                             }
70                     }
71                     if (queen != 1) {
72                         int queenRight = queen >> (list.size() - j);
73                         if ((queenRight & myQueen) != 0) {
74                             isFind = 0;
75                             break;
76                         }
77                     }
78                 }
79                 if (isFind == 1) {
80                     list.add(myQueen);
81                     int size = list.size();
82                     findMyQueen(list);
83                     clear(list, size);
84                 }
85 
86             }
87 
88         }
89 
90     }
91 
92     void clear(List<Integer> list, int index) {
93         for (int i = index - 1; i < list.size(); i++)
94             list.remove(i);
95 
96     }
97 }
98 

list用来存放皇后队列
如果回溯的过E中没有扑ֈ合适的皇后  则会q行清空的操作(删去一个皇后)

解决八皇后问题的核心法  首先当然是回?/p>

我自׃用的?位取&的操?nbsp; 用来判断下一个皇后的位置正确与否
皇后左移/右移  之后与现在正在处理的皇后q行&操作    UM的规则是队列中的皇后与现在要处理的皇后的行的间距



水木清华77 2011-07-04 11:05 发表评论
]]>
վ֩ģ壺 ޹ۺϾƷ| ƬӰԺۿ| Ʒþþþþþ| ձһƵۿ| ۺ| ŮվѸƵ| һëƬaaaaaaƵѿ| ޻ɫվ| ȾѾƷ| þþþþùƷͬ | ޹| avƷɫҹĻ| Ƶ| ˳Ƶ69| avƬvrһ| ƷۺϾþĻ| ѿwwwƵ| պƷƵѹۿ| ޸Ʒһ| 97þþƷĻ | Ʒҹѹۿ| þþѵľƷ| ۺϾƷһ| ޻ɫѹۿ| ޾Ʒ߹ۿ㶮| Ƶһ| պ伤Ƶ߲| Ƭ߹ۿѹۿȫй| Ů˳Ժ˾޸| պƷһ | ۺϽ޺ݺ| ھƵƷ| պӰ߹ۿվ | AVһþ| ѿAVëƬһ| þaѹۿ| պƷվ| ޾߹ۿ| պƷһAVۿ| Ļ˾Ʒһվ| 뿨ͨҰ|