2017-07-05 85 views
1

ALL,JVM如何在内部工作

在工作中,我们有一个用JAVA编写的软件。它运作良好。在夫妇的来源,我们有一个声明是这样的:

import x.y.z 

有在这里我们使用

import x.y.* 

最近我们已经从软件保障团队的扫描,他们发现几个不足之处没有源文件。

一个例子是这样的:

The code is using MD5 encryption algorithm. 

我们的代码甚至不导入连接到MD5更不用说使用它的类。

所以,我的问题是:

如果我对Foo类的进口,确实JVM实际上拉一切从JAR /库?

谢谢。

+2

进口只用在编译的时候,所以你可以写'z',而不是'xyz'每次需要类'z',也就是说,无需使用完全限定名称 - 这是导入命名空间的一种方式。如果您使用导入或完全限定名称而不导入,则生成的代码是相同的。无论如何,请询问“软件保障团队”以获取更多关于问题出在哪里的信息。 –

+0

我怀疑你遇到的是一个JVM参数。不一定是实际的代码。 –

+2

您不一定会找到名为'MD5something'或类似的类。最有可能的代码是使用JCE,然后代码看起来像'mac = Mac.getInstance(“MD5”); result = mac.doFinal(bytes)'。 –

回答

2

如果我有一个Foo类的导入,JVM实际上是否从JAR /库中抽取所有东西?

不,只有在运行时所需的类别将由JVM加载。

但是,如果您A类使用库班L1和类L1使用另一个库类L2,然后L1L2将被载入。因此,您无法简单地通过查看您的类import语句来确定是否使用MD5。 (还有其他原因...)

确定实际使用的类的一种方法是使用命令行选项-verbose:class启动JVM。这将显示有关每个加载的类的信息,包括库类。

+0

谢谢。我们将尝试使用'-verbose'参数运行。 – Igor