我在创建一个对象时发现第一次new出的对象会耗时比较长,而后面的创建则会很快速,请问大神这是为什么?
代码如下:
public static void main(String[] args) throws InterruptedException {
for(int i =0;i<5;i++){
long now = System.currentTimeMillis();
RestTemplate httpClient = new RestTemplate();
System.out.println(System.currentTimeMillis() - now);
}
}
输出结果如下:
1084
16
7
12
5
感谢大神回答!
类的对象在第一次创建的时候,Java虚拟机(JVM)首先检查是否所要加载的类对应的Class对象是否已经加载。如果没有加载,JVM就会根据类名查找.class文件,并将其Class对象载入。一般某个类的Class对象被载入内存,它就用来创建这个类的所有对象。
所以同一个类创建第二个对象的时候就不再需要加载类对象,而是直接实例化,这样后面创建的时间就短了
因为java字节码的编译,静态类型的初始化等等都在首次加载发生,而之后不需要,所以第一次加载慢。
在第一次new对象时,需要把对应的类load到内存,还要为静态变量分配存储空间,所以会慢一些。