Java批量运行,第一次运行慢

时间:2021-04-27 16:57:29

问一个问题:Java的类加载是在运行时加载的,所以批量执行的时候第一次执行很慢(因为要加载类),有没有什么办法在初始化之前就把所有的类加载完?

8 个解决方案

#1


类静态化,在加载前,完成初始化

#2


static。。。不建议把有类都弄成静态

#3


有没有需要在一开始的时候全部初始化??可以在用到时再初始化啦

#4


引用 1 楼 q54244125 的回复:
类静态化,在加载前,完成初始化


用的是第三方的jar包,它内部的类没办法静态化怎么办?

#5


引用 3 楼 soton_dolphin 的回复:
有没有需要在一开始的时候全部初始化??可以在用到时再初始化啦

Spring

#6


1.有点不理解楼主的需求,java项目第一次运行慢的原因确实如楼主所说需要进行编译及类加载,但是这是jvm所必须的,本来初始化的时候jvm就是按需进行类加载的,你程序里没有引用的类他是不会加载的。
2.如楼上所说,就算你定义成static的,但是static是静态的代码块,它也是初始化的一部分,只不过是一开始就加载罢了,这也没法提高程序第一次运行的速度,而且你都设置成静态的,这就要求所有对象共享这些静态域,你还要考虑并发,一个项目里面怎么可能实现呢?
3.所以总结下,楼主的这种操心多虑了,jvm虚拟机就已经优化过了。

#7


引用 6楼CodeLoveDancer 的回复:
1.有点不理解楼主的需求,java项目第一次运行慢的原因确实如楼主所说需要进行编译及类加载,但是这是jvm所必须的,本来初始化的时候jvm就是按需进行类加载的,你程序里没有引用的类他是不会加载的。
2.如楼上所说,就算你定义成static的,但是static是静态的代码块,它也是初始化的一部分,只不过是一开始就加载罢了,这也没法提高程序第一次运行的速度,而且你都设置成静态的,这就要求所有对象共享这些静态域,你还要考虑并发,一个项目里面怎么可能实现呢?
3.所以总结下,楼主的这种操心多虑了,jvm虚拟机就已经优化过了。
感谢。说的很详细

#8


要么自己写个托管容器,要么找Spring,托管整个bean生命周期。

#1


类静态化,在加载前,完成初始化

#2


static。。。不建议把有类都弄成静态

#3


有没有需要在一开始的时候全部初始化??可以在用到时再初始化啦

#4


引用 1 楼 q54244125 的回复:
类静态化,在加载前,完成初始化


用的是第三方的jar包,它内部的类没办法静态化怎么办?

#5


引用 3 楼 soton_dolphin 的回复:
有没有需要在一开始的时候全部初始化??可以在用到时再初始化啦

Spring

#6


1.有点不理解楼主的需求,java项目第一次运行慢的原因确实如楼主所说需要进行编译及类加载,但是这是jvm所必须的,本来初始化的时候jvm就是按需进行类加载的,你程序里没有引用的类他是不会加载的。
2.如楼上所说,就算你定义成static的,但是static是静态的代码块,它也是初始化的一部分,只不过是一开始就加载罢了,这也没法提高程序第一次运行的速度,而且你都设置成静态的,这就要求所有对象共享这些静态域,你还要考虑并发,一个项目里面怎么可能实现呢?
3.所以总结下,楼主的这种操心多虑了,jvm虚拟机就已经优化过了。

#7


引用 6楼CodeLoveDancer 的回复:
1.有点不理解楼主的需求,java项目第一次运行慢的原因确实如楼主所说需要进行编译及类加载,但是这是jvm所必须的,本来初始化的时候jvm就是按需进行类加载的,你程序里没有引用的类他是不会加载的。
2.如楼上所说,就算你定义成static的,但是static是静态的代码块,它也是初始化的一部分,只不过是一开始就加载罢了,这也没法提高程序第一次运行的速度,而且你都设置成静态的,这就要求所有对象共享这些静态域,你还要考虑并发,一个项目里面怎么可能实现呢?
3.所以总结下,楼主的这种操心多虑了,jvm虚拟机就已经优化过了。
感谢。说的很详细

#8


要么自己写个托管容器,要么找Spring,托管整个bean生命周期。