社区
Java SE
帖子详情
问一个类的加载问题
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
打赏
收藏
问一个类的加载问题
第一种: 页面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 在实例化类的时候方法是否也一起加载并实例?
复制链接
扫一扫
分享
转发到动态
举报
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中才使用的。
另外:在实例化类的时候方法是一起加载并实例的哈
阿里巴巴面试总结DOC版
阿里巴巴面试总结
java
一个
类
多次
加载
_据说99.99%的人都会答错的
类
加载
问
题
概述首先还是把
问
题
抛给大家,这个
问
题
也是我厂同学在做
一个
性能分析产品的时候碰到的
一个
问
题
。同
一个
类
加载
器对象是否可以
加载
同
一个
类
文件多次并且得到多个Class对象而都可以被java层使用吗?请仔细注意上面的描述里几个关键的词:同
一个
类
加载
器:意味着不是每次都new
一个
类
加载
器对象,我知道有些对
类
加载
器有点理解的同学肯定会想到这点。我们这里强调的是同
一个
类
加载
器对象去
加载
。同
一个
类
文件:意味着
类
文件...
类
加载
器详解(自己实现
类
加载
器)
目的:看懂4,并且自己实现
一个
类
加载
器 1.
类
加载
器是什么东西 2.
类
加载
器的种
类
3.
类
加载
器的机制 4.自己实现
一个
类
加载
器 在这里引用大佬的链接,这个是讲的很详细的,如果心急,不想细细研究那就直接看我总结的吧
类
加载
器是什么东西? 1.
类
加载
器就是
加载
所有的
类
的工具,它
加载
的
类
在内存中只会存在一份,也就是生成的堆中的Class对象。不可以重复
加载
2.在我们java编码里,
一个
类
是用全限定名(包名加
类
名)标识的唯一的
一个
类
,但在jvm里是根据
类
加载
器+全限定名来标识,也就是说不同
类
加载
器
加载
的同
一个
类
【JVM基础】 JVM 如何
加载
一个
类
以及
类
加载
机制
如果你要 “new ReplicaManager()” 初始化这个
类
的实例,那么就会
加载
这个
类
,然后初始化这个
类
,但是初始化这个
类
之前,发现 AbstractDataManager 还没有
加载
和初始化,就需要先
加载
这个父
类
,并且初始化这个父
类
。然后从 main 方法的入口代码开始。假设你的应用程序需要去
加载
一个
类
,他首先会委派给自己的父
类
加载
器去
加载
,经过层层床底,最终传递到顶层的
类
加载
器去
加载
。但是如果父
类
加载
器在自己负责范围
加载
的范围内没有找到这个
类
,就会将
加载
的权利给自己的子
类
加载
器去进行
加载
。
JVM基础 -> Java中有哪些
类
加载
器?
类
加载
器工作原理?
Java中有哪些
类
加载
器?
类
加载
器工作原理? JDK⾃带有三个
类
加载
器:bootstrap ClassLoader、ExtClassLoader、AppClassLoader。 BootStrapClassLoader(引导
类
加载
器): 根
类
加载
器,依赖于底层操作系统,由C编写而成 默认负责
加载
jre\lib⽂件夹下的jar包和class⽂件。 负责
加载
虚拟机的核心
类
库,如java.lang.*。Object
类
就是由根
类
加载
器
加载
的。 ExtClassLoader(标准扩展
类
加载
器)
Java SE
62,634
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章