Java的底层其实就是JVM(Java虚拟机);对于这个底层的学习一直是比较困难的,看书和看视频呢,讲得都是非常底层的一些理论,甚至涉及到计算机组成原理内容更多;实话说上大学时候老师是根本不讲JVM的,简单粗暴讲Java怎么用,有什么特性。
所以在工作后,为了更进一步的发展,对自己所用到的技术也要有更深一步的理解,这才慢慢接触和学习。虽然平时业务开发肯定是用不上的(除非有大神做的底层开发优化之类的),但是清晰了解总比迷糊不清好很多。
栈:
栈分两种:本地方法栈 和 虚拟机栈。两者没有本质上的区别,区别在于服务的对象不同。
本地方法栈服务于JVM虚拟机的native方法。虚拟机栈服务于虚拟机执行的Java方法。JDK 安装目录下就会有很多C的文件,这些就都是native方法。
栈和线程是一一对应的,一个栈对应一个线程,多线程进行切换的时候,也是在进行栈的切换。
(1)native方法就是Java方法去调用非Java的方法的接口,例如Java底层的C语言的方法就是一个很好的例子,被native标识符标志的话就表明该方法是有实现方法体的,也可以通过其它修饰符来表明这个方法的具体状态,例如native static同时用,就表明可以直接调用无需创建实例,然后它的返回类型也是支持Java的全部类型。
</
(2)为什么要用Java去调其他语言的方法呢?
因为有的方法实现起来用Java不方便(例如和计算机硬件的交互,单片机那些,操作系统那些),用Java让我自己写,我还真是想像不到面向对象语言怎么去很好地实现这操作,用其他语言例如C等可以很方便,运用不同的语言特性可以达到最优效果。而Java语言也不是写那些底层的,它说高级语言其实更偏向于解决生活中的业务需求。所以这种封装也让Java编程者不必要去了解到Java底层与硬件的具体交互实现。