2017-07-05 86 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