• 东方
    2018-09-03
    详尽,赞👍

    随便找几断代码,javap反编译,查jvm手册一会儿就明白了
    
     17
  • godtrue
    2018-09-07
    1:.Java代码由Java的语言语法组成,有开发人员来编写

    2:.class 代码有Java编译器来编译,Java编译器也是有对应的开发人员来编写的,.class代码有字节码指令来组成,如果人理解Java字节码指令集比较简单也可以直接编写.class代码

    3:Java对应的机器码有JVM来编译出来,原料是.class代码,如果人类理解机器码比较容易,那么可能变成就直接在机器硬件上直接编写机器码了

    4:高级语言的出现是为提高人编写代码的效率,我们学习.class字节码指令集、JVM、机器码等的知识,是为了使我们编写高级语言代码能更好的在机器硬件上的执行效率更高,从高级语言的代码到能在机器上运行的机器码,中间经过了好几层的转换,所以,了解每一层是怎么转换就能更快的定位出高级语言代码的性能瓶颈了,感觉是为了在人的编码效率和机器的执行效率之间找平衡点

    有个疑问❓
    没太理解,JVM基于栈的计算模型的原因,推测可能是为了更简单的实现和更高的性能但是是怎么做到的呢?请老师解释一下
    展开

    作者回复: 基于栈的计算模型确实是为了实现起来容易一些,但它并不高效,因为没有使用底层体系架构的寄存器。

    在JVM中,只有解释器完整地模拟出该计算模型。即时编译器在解析字节码时会使用一个虚拟的栈计算模型,但是在接下来的编译优化,以及生成的机器码就不用了。

    
     7
  • 三木子
    2018-09-03
    为什么局部变量要初始化?想请老师专业解答下!

    作者回复: 如果是虚拟机初始化局部变量,那么它需要掌握每个变量的生命周期,以便初始化共享同一下标的局部变量。实现起来比较费事。

    另一方面,从代码规范来看,使用未经初始化的局部变量意义不明。

    
     3
  • 熊猫酒仙
    2018-09-07
    C/C++的汇编指令,会有大量寄存器的操作
    请问java的指令会用到寄存器吗?

    作者回复: Java字节码不会,但是底下的实现(比如解释执行器,即时编译器)是会的。

    
     2
  • code-artist
    2018-09-06
    “因此,我们需要利用 dup 指令复制一份 new 指令的结果,并用来调用构造器。当调用返回之后,操作数栈上仍有原本由 new 指令生成的引用去...”

    第一步栈顶压入new对象的引用r0,执行dup后复制r0得到r1,压入栈顶。r1用于调用构造器,完成后会pop, 留下栈顶元素r0。不知我这样理解对不?
    我的问题是为什么要dup呢?直接用r0不做pop不好吗?

    作者回复: 构造器是没有返回结果的,所以不用pop。如果不dup的话,就只有一个r0,在调用构造器时用掉了,程序就再没有对该新建对象的引用了。

    
     2
  • 沈飞龙
    2019-04-22
    想请教下 编译后匿名内部类会生成一个class文件,但是函数式接口实现的代码却不会生成一个class文件,这是什么原理?
    
     1
  • YIFENG
    2018-09-03
    64位虚拟机中long和double也都是占用两个栈单元吗?
    
     1
  • Void_seT
    2018-09-03
    数组访问指令表,int文稿中写的iaload,iastore;表格中列的iastore和istore

    作者回复: 多谢指出!

    
     1
  • Jerry银银
    2019-12-28
    老师,请教下,在专栏中(关于虚拟机的书籍中)有提到:Java虚拟机大部分都是基于栈,有些虚拟机是基于寄存器的,比如Android的Dalvik和ART。

    这听起来挺抽象的,老师能具体讲讲它们的区别?

    是字节码执行的时候有区别的吗? 还是说字节码本身就有区别?
    展开
    
    
  • 饭粒
    2019-12-23
    图文并茂,总结详尽!感觉这篇放在前面可能更好。
    
    
  • gogo
    2019-09-29
    老师您好,从第一篇看到现在,对某个方法的执行流程还不是很理解,有哪一篇文章是说整个流程的吗,从主类加载初始化到某个方法执行结束的
    
    
  • 师爷
    2019-09-25
    某些方法阻塞会不会导致弹栈阻塞呢
    
    
  • 小美
    2019-07-14
    就是说如果是解释执行就在栈桢内完成了,不用寄存器。如果是即时编译执行,就用寄存器来存放操作数,对么
    
    
  • ゞ﹏雨天____゛
    2019-03-27
    讲解内容中,这几张总结表,写的真的给力。赞
    
    
  • 李鑫磊
    2018-11-19
    笔记:https://www.jianshu.com/p/b395ed905e0d
    
    
  • 对方正在输入
    2018-11-12
    在JVM中,每个方法中,代码语句执行完毕,是不是都会默认有个return

    作者回复: 正常执行路径会有return,有返回值的是ireturn,areturn这些。异常执行路径会有athrow。你可以试试查看只有一句throw new Exception()的方法

    
    
我们在线,来聊聊吧