java - 如何识别返回的对象是否是在方法执行期间创建的 - Java

标签 java methods return-value static-analysis

原始问题:给定一个方法,我想确定返回的对象是否是在该方法的执行过程中创建的。我可以或应该使用哪种静态分析?

重新设计的问题:给定一个方法,我想确定该方法是否可以返回在该方法中创建的对象。因此,如果我将该方法中返回类型的所有实例都添加到一个集合中,是否有一个分析可以告诉我,对于该集合的每个成员,它是否可以返回。此外,是否可以不将集合限制为单个方法,而是将原始方法调用的所有方法限制为委托(delegate)?

这并不特定于任何调用。

看起来方法逃逸分析可能就是答案。

感谢大家的建议。

最佳答案

如果您对任何调用感兴趣并且仅当方法本地 new 创建该值时,您的问题似乎是一个简单的“到达”分析(“新值是否到达返回语句”)。如果您需要知道任何调用是否可以从任何子计算返回新值,您需要计算可能的调用图并确定任何被调用函数是否可以返回新值,或将新值从被调用函数传递到其父函数。

Java 静态分析框架有很多。

SOOT是一个基于字节码的分析框架。您可能可以使用它来实现静态查询。

DMS Software Reengineering Toolkit是用于构建自定义分析器和转换工具的通用引擎。它有一个完整的 Java 前端,并在代码上计算各种有用的基础分析(定义/使用链、调用图)。它可以处理类文件,但目前只能获取类型信息。

如果您想要进行动态分析,无论是单独进行还是作为加强静态分析的一种方式,DMS 都可以通过插入代码来跟踪分配来以任意方式检测源代码。

关于java - 如何识别返回的对象是否是在方法执行期间创建的 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3169830/

相关文章:

java - 无法理解类在 Scala 中的工作原理

linux - 测试返回值 : command not found

java - 我怎样才能获得多线程并行计算器(阶乘和)

java - 从 onClick(View v) switch (v.getId()) 中调用方法

java - Maven编译失败(但Eclipse下编译成功)

java - return 在 boolean 方法中究竟做了什么?

c - 警告 : ‘return’ with a value, 在返回 void return next 的函数中; ex19.c:95:10: 错误:void 值没有被忽略,因为它应该被忽略

JavaScript 回调函数在我的情况下不起作用

java - 有没有办法使用Java来比较mp3文件?

java - 属性动画的端监听器