问一个类的加载问题

SambaGao 2010-07-14 11:04:51
第一种:
页面1 和 页面2 类1(有一个方法是页面1的和其它很多方法) 和 类2(也有一方法是页面2的和其它很多方法)

页面1 调用类1的方法(页面1)
页面2 调用类2的方法(页面2)

第二种
页面1 和 页面2 类1(有一个方法页面1和一个方法页面2还有很多其它的方法)

页面1 调用类1的方法(页面1)
页面2 调用类1的方法(页面2)

问题:
1 上述哪一个执行的时间短,效率高?

2 在实例化类的时候方法是否也一起加载并实例?
...全文
161 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wj63558595 2010-07-14
  • 打赏
  • 举报
回复
被你策晕了。。
healer_kx 2010-07-14
  • 打赏
  • 举报
回复
我觉得逻辑最重要了,不要考虑Page 和 class的速度关系,这个远不是瓶颈所在。
closewbq 2010-07-14
  • 打赏
  • 举报
回复
我也发表下我的观点。
首先我们从类初始化的过程去分析:

简单化了一下类初始化之前的几个步骤。
1.装载就是把二进制形式的java类型读入到JVM中。
(从这一点分析,两个java类型似乎要比一个java类型在装载过程过损耗要大)
2.第2步就是连接,连接主要分为这么三个阶段。
验证,准备和解析。
验证主要是确保啦java类型的数据格式能够正确并适合于jvm使用
准备主要负责为该类型分配它所需的内存。大家都讨论方法是否要分配内存?
在准备阶段,jvm实现可能为一些数据库结构分配内存,目的是提高运行程序的性能。这些数据结构就包含方法表,它包含指向类中的每一个方法(并且包裹从超类继承的方法)的指针。方法表可以使继承的方法执行时就不需要搜索超类了。
解析在上面两个步骤完成之后进行,它的主要任务就是在类型的常量池中寻找类,结构,字段和方法的符号引用,把这些符号引用替换成直接引用。
3.初始化也就是为类变量赋予正确的初始值。
到此为止这就是一个类在实例化过程中,要经历的几部,如果非要说那个效率高?可能仅仅从装载上一个类似乎比两个类装载过程中效率要高可能那么一点点点。。。
但是如果页面1和页面2都会装载同一个包含了页面1方法和页面2方法的一个大的类的话,相比页面1装载页面1的类,页面2装载页面2的类来说,可能消耗更为大一点。
这仅仅是从一个类实例化过程去解释。在实际应用过程中,还是要看类中方法的多少或者方法的含义。以及功能包的结构,是否要将它们和在一起或者不合在一起。我想对于这个性能问题,可能没有什么意义!
wakeUpDoNottLazy 2010-07-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 nihaozhangchao 的回复:]
1 上述哪一个执行的时间短,效率高?
2 在实例化类的时候方法是否也一起加载并实例?
[/Quote]
1:就像 1 楼所说的:[Quote=引用 1 楼 healer_kx 的回复:]我觉得逻辑最重要了,不要考虑Page 和 class的速度关系,这个远不是瓶颈所在。[/Quote] 如果非要提及这方面的效率,我想要看具体情况了,两种情况的性能消耗在理论上我想可能会在“类加载”与“实例化”的过程中有所不同。第一种 情况比第二种情况要多加载一个类。但我想任何一个 java 程序员都不能把“多使用一个类”与“性能”牵扯到一起。
2:不知道“方法”是在类加载的时候被“实例化”的,还是在第一次 new 的时候被实例化的(我猜是类加载的时候)。同一个类的多个实例的同一个方法在内存中应该只有一个存储空间。
yearnqiao 2010-07-14
  • 打赏
  • 举报
回复
自我觉得是第二个快
sun0322 2010-07-14
  • 打赏
  • 举报
回复
第二个快!
IOshopping 2010-07-14
  • 打赏
  • 举报
回复
个人认为是第一种方法时间短,效率高
理由:
你是在页面1中才使用到方法“页面1”,没必要把方法“页面2”也弄出来,因为根本就没用到,方法“页面2”只是在页面2中才使用的。



另外:在实例化类的时候方法是一起加载并实例的哈

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧