JVM 符号引用(Symbolic References)


符号引用


  • 什么是符号引用?在说符号引用之前我们先来看看直接引用,直接引用是什么,比如就是你拥有你所需要数据的地址值,可以直接根据地址值获取到数据。但是 java语言是解释性的语言,然后由于总总原因(我也不知道对不对的原因)在某些时刻有些东西的直接地址还并不存在,是无法使用直接引用。这时候就可以用到符号引用了。
  • 符号引用:符号引用是一个字符串,它给出了被引用的内容的名字并且可能会包含一些其他关于这个被引用项的信息——这些信息必须足以唯一的识别一个类、字段、方法。这样,对于其他类的符号引用必须给出类的全名。对于其他类的字段,必须给出类名、字段名以及字段描述符。对于其他类的方法的引用必须给出类名、方法名以及方法的描述符。这样我们就能根据符号引用锁定唯一的类,方法或字段了。

JNI字段描述符


  • JNI字段描述符是类描述符,方法描述符,字段描述的具体的实现规则,下面我将一一介绍。
类描述符

  • 例:
类:Java.lang.String
对应描述符:Ljava/lang/String;
  • 类描述符的规则是以L开头,其后跟着该类的全限定名,并将其中中的 “.” 改为 “/” ,最后分号“;”结束(只有 类描述符需要以分号结束好像,基本类型的不需要)。
  • 再补上其他基本类型的符号(由于基本类型不存在全限定名,只需要一个符号就可以表达该基本类型)
java类型符号
booleanZ
byteB
charC
shortS
intI
longJ
floatF
doubleD
voidV
字段描述符

  • 好像类描述符也是字段描述符,有点晕~。我们确定一个字段,只需要字段描述符和字段名两部分。那好像除了字段名,字段描述符只需要描述类型就可以了,所以类描述符好像等价于了字段描述符。
  • 例:
int num=3;
字段描述符:I;
字段名:num
  • 但是字段还有数组类型,数组的描述规则如下
String[][] num=null;
字段描述符:[[Ljava/lang/String;
字段名:num
  • 数组类型只需要原描述符在前面加一个[,如果是二维数组就加[[,以此类推。
方法描述符
  • 例1:
String test();
方法描述符:()Ljava/lang/String;
方法名:test
  • 例2:
long test(int i, Object c);
方法描述符:(ILjava/lang/Object;)J
方法名:test
  • 例3:

void test(byte[] bytes);
方法描述符:([B)V
方法名:test
  • 三个例子很清晰的就能看明白了,方法描述符就是“()”和参数与返回值的字段描述符的组合,组合规则是:
(第一个参数的字段描述符第二个参数的字段描述符.....)返回类型的描述符
  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
JVM Profiler是一种用于监测和分析Java虚拟机(JVM)运行时性能的工具。它可以通过收集和分析JVM的运行时信息来帮助开发人员识别和解决性能问题。JVM Profiler可以通过使用JVM Agent来实现,JVM Agent是一种通过在JVM启动时加载的方式来修改JVM行为的工具。通过JVM Agent,JVM Profiler可以获取程序运行时的信息,如方法调用、内存使用情况、线程状态等。这些信息可以用于分析程序的性能瓶颈,并进行优化。一种常见的使用方式是通过命令行调用JAR文件来运行JVM Profiler,并指定相应的参数和报告器。例如,可以使用以下命令来运行JVM Profiler并将结果输出到控制台:java -javaagent:target/jvm-profiler-0.0.5.jar=reporter=com.uber.profiling.reporters.ConsoleOutputReporter -cp target/jvm-profiler-0.0.5.jar com.uber.profiling.examples.HelloWorldApplication。此外,JVM Profiler还可以使用JVMTI(JVM Tool Interface)来实现,JVMTI是JVM提供的一套标准的C/C++编程接口,用于实现Debugger、Profiler、Monitor、Thread Analyzer等工具。通过JVMTI,开发人员可以编写自定义的JVM Profiler来满足特定的需求。 #### 引用[.reference_title] - *1* *3* [JVM CPU Profiler技术原理及源码深度解析](https://blog.csdn.net/weixin_45678149/article/details/130775520)[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^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [JVM Profiler介绍](https://blog.csdn.net/weixin_33676492/article/details/89589464)[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^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值