Java字节码反编译 – 未使用的方法存在?

说我有

private void ThisIsMySecurityMethodPleaseLookHERE() { //security stuff } 

在我的程序中,但是在任何实际执行的代码中都没有调用该方法。 它被编译为字节码吗? 或者Java编译器是否识别出这个事实并将其过滤掉? 我知道它永远不会成为PAST字节码,因为它不是真正的调用。

我问,因为我知道Java很容易反编译。 当他们反编译我的.class文件时,我的所有未使用的方法也会出现吗?

我认为情况并非如此,因为如果是这样的话,每个java文件都会有膨胀代码来隐藏真实代码,并通过混淆器传递。

我只是试图想出除了混淆之外的方法来抵制随意的黑客。

为什么要假设? 使用javap -c查看字节代码中的内容。

鉴于编译器无法知道私有方法是否可以通过reflection调用,我个人认为它仍然存在。

我不确定你的意思是:

我认为情况并非如此,因为如果是这样的话,每个java文件都会有膨胀代码来隐藏真实代码,并通过混淆器传递。

我希望大多数开发人员都会意识到通过默默无闻的安全性几乎没有什么保护 – 而且代码本身的真正价值通常在于设计等,而不仅仅是实现。 所以不,不要在你的课程中包含敏感信息 – 但同样不要太偏执。 你需要权衡试图击败攻击者的成本与他们“赢”的成本。 这种平衡将取决于所涉及的代码 – 以及您试图防范的攻击类型。

私有方法实际上会使它成为字节代码。 也许甚至汇编代码。 你必须想到所有这些方法都被转化为例程。 因此,对于任何未使用的私有方法,字节代码块中仍然会有例程。

另外,还有一些工具可以清理这些东西并删除过多的未使用的代码/类。 如果是这种情况那么,是的,你在反编译的代码中没有它们。