native和方法区

沙箱机制(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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值