沙箱机制(sandbox)
沙箱是一个限制程序运行的环境.沙箱机制就是将java代码限定在虚拟机(JVM)特定的环境中,并且严格控制代码在本地资源的访问及调用,以达到对代码进行强制隔离,防止破坏本地系统
native
方法名前有native关键字修饰表名此方法是本地方法,java无法实现(调用底层),通过调用java本地接口,再由本地接口调用本地方法库实现
new TestThread1().start();
查看start()
方法源码可以看到
public synchronized void start() {
//如果线程是新生状态就把这个线程添加到组
if (threadStatus != 0)
throw new IllegalThreadStateException();
group.add(this);
//设置线程开始状态为false
boolean started = false;
try {
//调用start0()方法并设置线程开始状态为true
start0();
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
}
}
}
private native void start0();
可以看到thread的start()
方法实际上是调用start0()
方法,但是start0()
后面没有具体的实现方法也没有报错,怎么回事呢?由于多线程要调用系统底层,java无法调用底层接口,所以使用native
关键字来调用java本地接口(JNI Java Native Interface),通过本地接口调用调用本地方法库(由C
,C++
编写)
PC寄存器(Program Counter Register)
每个线程都有一个程序计数器,它是私有的,就是一个指针,指向程序中的方法字节码(用来存储指向对象一条指令的地址,也就是即将要执行的代码),由执行引擎读取下一条指令,是一块非常小的空间,可以忽略不计
方法区(Method Area)
方法区是被所有线程共享的,所有字段和方法字节码,以及一些特殊方法,接口代码也定义在此
所有定义的方法的信息都存储在该区域.此区域属于共享区域
静态变量(static),常量(final),类信息(Class)(构造方法,接口定义),运行时的常量池存在方法区中,实例变量存在堆中,与方法区无关