社区
Java SE
帖子详情
静态方法在JVM运行的原理不是很理解????
zaixiankaifa
2011-04-09 09:49:52
我是这样理解的:静态方法先在持久层加载,然后,在栈里面划分出一个方法空间给它, 然后在堆里面出现一个空间存放该静态方法的“方法首字母的地址值”,接着,在堆的另一个地方,出现一个该方法的对象?
不知道我这样理解对不对,请各位大师请教!!!
...全文
777
6
打赏
收藏
静态方法在JVM运行的原理不是很理解????
我是这样理解的:静态方法先在持久层加载,然后,在栈里面划分出一个方法空间给它, 然后在堆里面出现一个空间存放该静态方法的“方法首字母的地址值”,接着,在堆的另一个地方,出现一个该方法的对象? 不知道我这样理解对不对,请各位大师请教!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hepeng_8
2011-04-09
打赏
举报
回复
支持二路的说法就是那样的
baobao04551
2011-04-09
打赏
举报
回复
[Quote=引用 1 楼 ticmy 的回复:]
有点像,但不是你说的那样
“静态方法先在持久层加载”,不知所云
首先.class文件装载,会将class文件中的信息解析成厂商特定的数据结构,存在方法区
当调用静态方法时,会使用invokestatic指令,其参数是该类的常量池索引,该索引指向一个Method,刚开始时,这个Method也只是字符串描述,包括方法所属类名,方法名,描述符等。第一次调用该方法时,会去查找该方法在方法区……
[/Quote]
楼上回答的好,顶一个,补充两句:
LZ的问题确实不太明白,但是我想你是想弄清楚静态方法与普通方法执行时的区别吧?我觉得加载的话,楼上回答的很好了,执行的话主要有以下三点区别:
1) 用的指令不一样,静态方法用invokestatic,而普通方法有invokespecial, invokevirtual,CSR 292还新增了invokedanymic.
2)查找的方式不一样:静态方法肯定只在自己本身的class的常量区中取查找,而普通的方法还会搜索继承的类和接口。
3) 执行时带的变量不一样,这一点和C++的原理相似,就是静态方法执行时不会把本身对象压入栈作为参数,因为他不需要,而普通方法则需要本身对象(this指针)。
龙四
2011-04-09
打赏
举报
回复
有点像,但不是你说的那样
“静态方法先在持久层加载”,不知所云
首先.class文件装载,会将class文件中的信息解析成厂商特定的数据结构,存在方法区
当调用静态方法时,会使用invokestatic指令,其参数是该类的常量池索引,该索引指向一个Method,刚开始时,这个Method也只是字符串描述,包括方法所属类名,方法名,描述符等。第一次调用该方法时,会去查找该方法在方法区的位置,然后将常量池中该方法的地方替换成指针
至于如何去查找方法,jvm实现可能会使用方法表,如果使用方法表就简单了,如果没有用方法表,它会按照该类,超类,实现的接口的顺序去查找方法的地址
详细内容可以参考《深入Java虚拟机》第二版第八章
magicluo
2011-04-09
打赏
举报
回复
你不要凭空想象啦
《深入java 虚拟机(第二版)》 说的应该是非常权威了 ,推荐你看看吧
不过已经绝版,电子版的也不错
a735194357
2011-04-09
打赏
举报
回复
学习中……
十年架构师详解
JVM
运行
原理
但是由于
JVM
对实际的简单开发的来说关联的还是不多,一般工作个一两年(当然不包括爱学习的及专门做性能优化的什么的),很少有人能很好的去学习及
理解
什么是
JVM
,以及弄清楚
JVM
的工作
原理
,个人认为这块还是非常有...
JVM
原理
-超详细总结
java编译器只要面向
JVM
,生成
JVM
能
理解
的代码或字节码文件。Java源文件经编译成字节码程序,通过
JVM
将每一条指令翻译成不同平台机器码,通过特定平台
运行
。
JVM
的生命周期:
JVM
的诞生:当启动一个Java程序时,一...
JVM
原理
与调优实战
本文深入探讨了Java虚拟机(
JVM
)的核心技术,从
JVM
的基本概念、内存结构、类加载机制、执行引擎
原理
到垃圾回收机制,全面解析了
JVM
的
运行
机制。文章还提供了
JVM
调优的实战技巧,包括常见启动参数、调优目标以及监控...
静态方法
存放在
jvm
哪里_
JVM
系列(1)java8的内存结构
想说一下这篇文章的脉络:首先,研究java7的内存结构,并对其进行一个详细的介绍,因为
理解
了java7之后java8比较容易
理解
接下来,使用一个例子来详解我们在
运行
一个程序的时候,代码在java虚拟机中的存储和转化。...
什么是
JVM
?
Sun Hotspot
JVM
为了提升对象内存分配的效率,对于所有创建的线程都会分配一块独立的空间 TLAB(Thread Local Allocation Buffer),其大小由
JVM
根据
运行
的情况计算而得,在 TLAB 上分配对象时不需要加锁,因此 ...
Java SE
62,628
社区成员
307,259
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章