加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

程序设计的5个底层逻辑,决定你能走多快

发布时间:2019-11-29 18:51:47 所属栏目:Unix 来源:站长网
导读:副标题#e# 肉眼看计算机是由CPU、内存、显示器这些硬件设备组成,但大部分人从事的是软件开发工作。计算机底层原理就是连通硬件和软件的桥梁,理解计算机底层原理才能在程序设计这条路上越走越快,越走越轻松。从操作系统层面去理解高级编程语言的执行过程

在linux中只要知道一个变量的起始地址就可以读出这个变量的值,因为从这个起始地址起前8位记录了变量的大小,也就是可以定位到结束地址,在 Java 中我们可以通过 Field.get(object) 的方式获取变量的值,也就是反射,最终是通过 UnSafe 类来实现的。我们可以分析下具体代码。

Field 对象的 getInt方法  先安全检查 ,然后调用 FieldAccessor 

    @CallerSensitive 

    public int getInt(Object obj) 

        throws IllegalArgumentException, IllegalAccessException 

    { 

        if (!override) { 

            if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { 

                Class<?> caller = Reflection.getCallerClass(); 

                checkAccess(caller, clazz, obj, modifiers); 

            } 

        } 

        return getFieldAccessor(obj).getInt(obj); 

    } 

 

 

 获取field在所在对象中的地址的偏移量 fieldoffset 

    UnsafeFieldAccessorImpl(Field var1) { 

            this.field = var1; 

            if(Modifier.isStatic(var1.getModifiers())) { 

                this.fieldOffset = unsafe.staticFieldOffset(var1); 

            } else { 

                this.fieldOffset = unsafe.objectFieldOffset(var1); 

            } 

 

            this.isFinal = Modifier.isFinal(var1.getModifiers()); 

     } 

 

 

 UnsafeStaticIntegerFieldAccessorImpl 调用unsafe中的方法 

     public int getInt(Object var1) throws IllegalArgumentException { 

          return unsafe.getInt(this.base, this.fieldOffset); 

     } 

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读