0
点赞
收藏
分享

微信扫一扫

native和方法区

大柚子top 2022-04-04 阅读 67
java

沙箱机制(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)(构造方法,接口定义),运行时的常量池存在方法区中,实例变量存在堆中,与方法区无关
————————————————

举报

相关推荐

0 条评论