java对象存储参考图

本文探讨了Java编程中面向对象的概念,强调了方法在程序运行中的核心地位。作者指出,尽管字段在类中占有一定地位,但主要是为方法提供数据支持。从用户角度出发,方法更为关键,因为它直接处理数据并产生结果。多线程问题也被提及,通过多例模式或加锁机制解决共享资源的并发访问。 Unsafe 类能够直接操作字段和方法的内存地址,揭示了对象和方法调用的底层机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现阶段的思考: 虽然我们都说java是面向对象的编程语言, 但即便如此,java终归是编程语言,编程语言就是要跑程序的,所谓跑程序就是跑逻辑,所谓跑逻辑就是跑方法, 所谓跑方法就是说方法很重要; 所有的程序运行,归根结底是方法对数据的处理, 尤其是现在大行其道的互联网应用,更能体现这一点: 一个完全不懂编码的用户,他不知道你所说的对象是啥,他只知道他使用你的程序时,输入一些数据,然后你的程序经过对他数据的处理,最终给他一些结果, 对于用户来说,你的程序就是一堆运行逻辑,这些逻辑对程序员来说就叫做方法; 感觉似乎是程序员提供了方法(或者叫做函数/或者叫做过程), 用户提供了数据; 但对于Java程序员来说, java语言是面向对象的语言,不是面向过程的语言, 所谓面向对象,指的就是我们提供的不仅仅是方法/过程, 而是提供了 方法和字段 的集合体–对象; 对象让程序运转起来; 但对于用户来说他并不关心你提供的对象中的字段, 用户只关心程序有没有帮他把数据处理好; 所以如果站在偏向用户的角度来看, 方法似乎比字段 分量更重要些, 虽然我们在学习java时, 类中的字段和方法是处于同一个级别的, 但此时此刻, 我们可能要把字段的级别降低一点, 说得再直白一点, 类中的字段数据,其实是给方法的运行提供支持的, 比如: 局部变量就是某个方法的暂存区; 成员变量就是同一个类的多个方法的共享暂存区; 类变量就是所有方法的共享暂存区, 常量就是方法的基础设定(不做变更); 这样来看,所有的字段就是围绕这方法转的, 所以类其实就跟文件夹一样,只是帮助我们把方法做了分门别类; 类更像是一个没有充电的手机,只能做板儿砖, 对象就是一个有了电的手机,不仅能做板儿砖,还能各种骚操作;

对象.方法 的本质是找到方法,并且最终调用方法; 所以说对象只是通过地址/指针 的方式使我们能够手握对象,找到方法; 当然与此同时,对象的一些字段也的确给方法的运行提供了数据缓存去,使方法更好运行;

说到这里,我对多线程问题不那么害怕了,说白了就是找方法干活呗; 当有多个线程要来调用这个方法干活时,因为都是通过对象调用的, 如果是只有一个对象,那么方法的缓存区 ,两线程操作时会不会相互影响? 如果会相互影响,那无非就是两个操作办法: 1. 在重新搞一份缓存区, 各用各的缓存区,那就没有问题了, 这就是多例模式;也即创建多个对象,每个线程一个对象, 目的就是让每个线程执行方法时,使用独享的数据缓存区(就是字段); 这样就不会相互影响了; 2. 另一个办法就是让连个线程还是只使用这一个对象,这样两个线程执行方法时缓存区会相互影响,那怎么办呢,就是加锁, 让线程串行, 第一个线程使用共享区的时候,把共享区锁起来,等方法执行完,再将锁释放,然后另一个线程再使用, 这样就通过打时间差的方式,让线程觉得还是自己在独享缓冲区;

其实类的方法和字段都是被加载到内存中,并存储在某个位置,也就是说每个方法和字段都有一个内存地址和他们对应; 只要我们想办法拿到对应的地址,我们就可以取字段,可以掉方法; 而对象只是给我们提供了一种方便获取字段和方法的手段; 所以明白了这一点, 就能够理解Unsafe类 为啥能做那么多骚操作了,因为Unsafe 就是可以直接找到字段和方法的地址, 然后让我们直接操作方法和字段; 而java对象 毕竟是将地址做了封装, 操作上更方便了,能力上做了阉割;
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值