Java符号引用与直接引用

在JVM中,类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:
加载、验证、准备、解析、初始化、使用和卸载7个阶段。
而解析阶段即是虚拟机将常量池内的符号引用替换为直接引用的过程。
一、符号引用(Symbolic References):符号引用以一组符号来描述所引用的目标,
符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可。
例如,在Class文件中它以
CONSTANT_Class_info、CONSTANT_Fieldref_info、
CONSTANT_Methodref_info等类型的常量出现。
符号引用与虚拟机的内存布局无关,引用的目标并不一定加载到内存中。
在Java中,一个java类将会编译成一个class文件。
在编译时,java类并不知道所引用的类的实际地址,因此只能使用符号引用来代替。
比如org.simple.People类引用了org.simple.Language类,
在编译时People类并不知道Language类的实际内存地址,
因此只能使用符号org.simple.Language
(假设是这个,当然实际中是由类似于CONSTANT_Class_info的常量来表示的)
来表示Language类的地址。各种虚拟机实现的内存布局可能有所不同,
但是它们能接受的符号引用都是一致的,
因为符号引用的字面量形式明确定义在Java虚拟机规范的Class文件格式中。
二、直接引用:直接引用可以是
1、直接指向目标的指针(比如,指向“类型”【Class对象】、
类变量、类方法的直接引用可能是指向方法区的指针)
2、相对偏移量(比如,指向实例变量、实例方法的直接引用都是偏移量)
3、一个能间接定位到目标的句柄
直接引用是和虚拟机的布局相关的,同一个符号引用在不同的虚拟机实例上翻译出来的直接引用一般不会相同。
如果有了直接引用,那引用的目标必定已经被加载入内存中了。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的方法引用无效,找不到符号的问题通常是由于没有正确导入或使用所需的类或方法导致的。根据您提供的信息,报错信息1指出找不到符号方法getId(),位置在com.xxx.xxxx.className类中。而报错信息2指出您没有使用Lombok支持的编译器,因此Lombok已被禁用。 要解决这个问题,您可以按照以下步骤进行操作: 1. 首先,要解决报错信息1中的方法引用无效问题,您需要确保在com.xxx.xxxx.className类中正确导入并使用了所需的类和方法。请检查您的代码,确保已正确导入并引用了getId()方法所在的类。 2. 然后,要解决报错信息2中的Lombok问题,您需要使用Lombok支持的编译器。根据报错信息,您的处理器是com.sun.proxy.$Proxy24,而Lombok支持的编译器包括sun/apple javac 1.6和ECJ。请确保您正在使用Lombok支持的编译器,如果不是,请切换到支持的编译器。 3. 如果您确认您正在使用Lombok支持的编译器,但仍然遇到问题,您可以尝试在IDEA的设置中进行配置。打开IDEA的设置,导航到Build,Execution,Deployment -> Compiler,然后在Shared build process VM options处填写-Djps.track.ap.dependencies=false,并保存设置。然后重新启动IDEA并检查JDK版本是否与Lombok兼容。 通过以上步骤,您应该能够解决idea java: 方法引用无效找不到符号的问题。请根据具体情况进行尝试,并确保您的代码正确导入所需的类和方法,并使用Lombok支持的编译器。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java:方法引用无效-IDEA 社区版 lombok插件报错解决](https://blog.csdn.net/qq_43781399/article/details/121954937)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [会出现无法解析符号,一种是因为Maven的依赖包依赖项丢失造成了代码大片红,可以通过IDEA右侧的Maven项目的...](https://download.csdn.net/download/weixin_42102220/16043959)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [解决IDEA报错:java 找不到符号](https://blog.csdn.net/cccsssrrr/article/details/131354234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值