一、我会想到汇编语言
汇编语言,我们应该有所接触吧 ,操作码、操作数、存储地址等,我想Java代码最后的最后应该和这类似吧。
二、我会想到现场
与其笼统的说程序在执行过程中,到不说机器在按照我们写好的运行逻辑一行行的执行,比如两个数的相加,赋值这些都不要再看成是Java代码了,把他想成机器指令更有助于我们理解程序的执行不是么?这样,就会容易明白为什么会有保存现场这么一说,现场是什么?是一个线程执行过程中的某一个时刻的一个冻结、封存的状态,相当于是关于这个线程的所有的东西,都被保护起来了,别的线程动不得,只有该线程再次获得CPU的执行权之后,方可恢复现场、继续操作后续指令。现场,就相当于我们大家在一起玩耍,忽然有个人说 “stop指令”,那么所有的人的所有的动作在那一刻被定格,不能动弹,只有再次获得“action指令”的时候,方可动。
三、一个CPU不能正真的并行
我们可以一边看电影,一边聊天,互不影响,其中这就是CPU轮训切换的结果......
10个线程,同一个时间点只能有一个线程执行,为什么呢?因为只有一个CPU,多线程的执行采用的是CPU轮询的方式处理,只不过轮训的速度我们感知的不太明显,看起来就像同时跑一样。明白jvm运行原理的人都知道,一个CPU无论如何都做不到真正的并行。
四、一般java程序执行过程
首先,一个Java代码需要javac成class文件,随后才有jvm的事情,jvm会加载这个.class文件,会给他分配,堆内存,栈内存,什么运行时数据区域,jvm还会负责将这些所谓的.class文件解释成当前cpu能看懂的机器指令,真是厉害,供执行。一个线程被jvm分配到的内存是唯一的。
五、线程
Java中编写线程的两种方式,第一继承Thread类,重写run方法,调用start方法启动一个现线程,第二实现runnable接口,实现run方法。
http://www.tuicool.com/articles/b6jUVn
http://blog.csdn.net/bingduanlbd/article/details/8363734
JVM一般讲内存分为:方法区,堆,程序计数器,java方法栈,本地方法栈,其中方法区域,堆是线程共享的,剩余的是非线程共享的,所以我上面的说法有些是不对的。