关于sipush

dracularking 2013-04-08 01:40:06
接触到sipush,对几个方面有些疑惑,先上图:



push的是short,但是这命令是将源数据按两个byte的方式接收的,而且指明是unsigned,不知道这里透露出了什么讯息?大家都知道,java中的byte是signed的,就是说在class文件中存储的short数据是不是按两个byte并列的方式存储的,unsigned意味着它可能是以十进制非负数的形式存储?如果是这样,目的是为了节约空间了

...全文
208 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
学无止境+ 2013-08-04
  • 打赏
  • 举报
回复
大神 真多!sipush 和 bipush 啥区别?
dracularking 2013-04-11
  • 打赏
  • 举报
回复
引用 5 楼 fangmingshijie 的回复:
http://www.vmth.ucdavis.edu/incoming/Jasmin/ref-sipush.html 这个sipush我还专门到书店看了,叫jvm内存管理来着。没怎么看进去,纯英文的。
这个其实应该只涉及到编译相关的问题 就是对于sipush这个命令 它所接受的参数形式两个unsigned byte和一个signed short的区别? 如果从节省空间角度,我觉得unsigned short还是最节约的 比如 1111 1111 1111 1111 = 65535 那字节码文件只要写成 sipush 65535 如果换成两个unsigned byte,那得是: sipush 255 255
dracularking 2013-04-10
  • 打赏
  • 举报
回复
引用 6 楼 ZangXT 的回复:
这里的byte不是java的数据类型byte,内存多少个byte,就这个东东。 lz把简单问题复杂化了。 想个最基础的问题,一个int数 0xffffffff 占4个字节,在内存里怎么表示的? 记住只有最高位的1才是符号位。
不管是signed,还是unsigned,在没被解释前,它的2进制存储形态没区别 但是两个地方的解释不同,一个接受的是两个unsigned byte,另一个是signed short,说明什么? 在class文件中,一个是 sipush 10 11 另一个是 sipush -258 这样?
  • 打赏
  • 举报
回复
http://www.vmth.ucdavis.edu/incoming/Jasmin/ref-sipush.html 这个sipush我还专门到书店看了,叫jvm内存管理来着。没怎么看进去,纯英文的。
dracularking 2013-04-09
  • 打赏
  • 举报
回复
引用 3 楼 fangmingshijie 的回复:
你看的是新版本的,额,我的也不知道什么版本的。
你的是书还是网页,网页的话能发下链接看下吗
  • 打赏
  • 举报
回复
你看的是新版本的,额,我的也不知道什么版本的。
dracularking 2013-04-09
  • 打赏
  • 举报
回复
引用 1 楼 fangmingshijie 的回复:
SIPUSH pushes a signed short onto the stack。 SIPUSH is a signed integer in the range -32768 to 32767 push two-byte signed integer sipush takes a single parameter, <n> (a 16-bit sig……
为什么两者的解释会不一样呢,一个是take 两个unsigned byte,一个是take一个signed short,我这个是从The Java Virtual Machine Specification SE7这本书上来的,你的?意思就是不同虚拟机实现不一样?
ZangXT 2013-04-09
  • 打赏
  • 举报
回复
这里的byte不是java的数据类型byte,内存多少个byte,就这个东东。 lz把简单问题复杂化了。 想个最基础的问题,一个int数 0xffffffff 占4个字节,在内存里怎么表示的? 记住只有最高位的1才是符号位。
  • 打赏
  • 举报
回复
SIPUSH pushes a signed short onto the stack。 SIPUSH is a signed integer in the range -32768 to 32767 push two-byte signed integer sipush takes a single parameter, <n> (a 16-bit signed integer), sign extends it to a 32-bit int, and pushes the resulting int onto the operand stack. sipush is typically more efficient than ldc. It also occupies fewer bytes in the class file. 具体目的是干什么,不知道了。

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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