我有四个关于java中静态方法的问题:
1)当在内存中加载静态方法时当加载类或第一次调用方法时?
2)从内存中卸载静态方法?当类被卸载或者该方法的执行流程在调用后结束时?
3)加载JVM静态方法的内存区域?在堆栈内存区域或者JVM中有不同类型的内存用于静态方法(我也读过一些静态内存) ?
4)在我们的应用程序中有这么多静态方法是否合适?
我在这个网站和其他网站上经历了很多问题,但他们没有明确指出。
答案 0 :(得分:4)
1)在内存中加载静态方法?加载类时或第一次调用方法时调用?
当类加载器加载该特定类时。
2)从内存中卸载静态方法?当类被卸载或该方法的执行流程在调用后结束?
当JVM垃圾收集到那个加载静态类的特定类加载器时。
3)加载JVM静态方法的内存区域?在堆栈内存区域或者JVM中有不同类型的内存用于静态方法(我也读过一些静态内存)?
通常在Pergemen空间。
where is a static method and a static variable stored in java. In heap or in stack memory
4)在我们的应用中有这么多静态方法是不是很好?
是的,当他们单独解决目的时。
答案 1 :(得分:2)
答案 2 :(得分:1)
1)在内存中加载静态方法?加载类时或第一次调用方法时调用?
ans)加载课程时
2)从内存中卸载静态方法?当类被卸载或该方法的执行流程在调用后结束?
ans)当ClassLoader加载类时会加载静态方法,卸载时会删除静态方法
3)加载JVM静态方法的内存区域?在堆栈内存区域或者JVM中有不同类型的内存用于静态方法(我也读过一些静态内存)?
ans)在Java虚拟机实例中,有关已加载类型的信息存储在称为方法区域的内存逻辑区域中。当Java虚拟机加载类型时,它使用类加载器来定位相应的类文件。类加载器读入类文件 - 二进制数据的线性流 - 并将其传递给虚拟机。虚拟机从二进制数据中提取有关类型的信息,并将信息存储在方法区域中。类中声明的类(静态)变量的内存也取自方法区域。
4)在我们的应用中有这么多静态方法是不是很好?
ans)一条经验法则:问问自己“即使没有构建Obj,这个方法也有意义吗?”如果是这样,那肯定是静态的。