Java应用程序中每个类的成本 – 较少的大类或几个较小的类
对于添加到
Java应用程序的每个新类,内存成本是多少?
>拥有5000个大型线路或几个500-1000个线路类(如果所有这些都是加载的话)是否更好? 在cruftex的回答后编辑: >拆分成逻辑块可以很好地改善代码重用和 这是我对类加载的理解: >首次使用Class加载到内存中(使用的内存大致是类文件的大小) 这是大致如何运作? 解决方法
通常没关系.一般来说,只有一小部分(比如说5%)的整体内存使用被代码以各种形式占用.因此,即使您确实将代码大小减少了一半,整体内存使用量也只会略有下降. 相比之下,过长的源文件会使代码库难以导航,而较大的范围使得更难以全面了解类的功能以及某个更改是否安全.因此,长源文件会使修改代码变得更加昂贵且容易出错.
正确.
Hotspot是一个JIT,所以你在这里重复一遍.但是,是的,JIT确实增加了代码大小(但提高了速度).
这是特定于JVM的.在Oracle Hotspot JVM上,每个对象的内存开销大约为8个字节,如以下程序所示: public class Test { public static void main(String[] args) { Object[] array = new Object[10_000_000]; Runtime rt = Runtime.getRuntime(); long usedBefore = rt.totalMemory() - rt.freeMemory(); for (int i = 0; i < array.length; i++ ) { array[i] = new Object(); } long usedAfter = rt.totalMemory() - rt.freeMemory(); System.out.println(usedBefore); System.out.println(usedAfter); System.out.println((double)(usedAfter - usedBefore) / array.length); } }
虽然它不是Java语言规范的强制要求,但我使用的每个JVM都会在ClassLoader无法访问时释放一个类(授予后,引导类加载器将始终保持可访问状态,但自定义ClassLoader可能无法访问). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |