ALL,
在工作中,我们有一个用JAVA编写的软件。它运作良好。在几个来源中,我们有这样的陈述:
import x.y.z
我们使用
没有源文件import x.y.*
最近我们从软件保障团队进行了扫描,他们发现了一些不足之处。
一个例子是:
The code is using MD5 encryption algorithm.
我们的代码甚至不会导入连接到MD5的类,更不用说使用它了。
所以,我的问题是:
如果我有Foo类的导入,JVM是否真的从JAR /库中提取所有内容?
谢谢。
答案 0 :(得分:2)
如果我有Foo类的导入,JVM是否真的从JAR /库中提取所有内容?
没有。 JVM只会加载运行时所需的类。
但是,如果您的班级A
使用库类L1
,而班级L1
使用其他库类L2
,那么都 {{将加载1}}和L1
。因此,您无法仅通过查看类L2
语句来确定是否使用了MD5。 (还有其他原因......)
确定实际使用的类的一种方法是使用命令行选项import
启动JVM。这将显示有关每个已加载类的信息,包括库类。
答案 1 :(得分:1)
首先,java编译器将源代码编译为字节代码。在运行时,Java虚拟机(JVM)解释此字节代码并生成机器代码,该代码将由运行java程序的机器直接执行。
访问JVM,JRE和JDK https://javatutorialdetails.blogspot.com/2017/10/java-tutorial-in-details-step-by-step.html
的优秀教程