q1:Java编译器是什么?
a:JAVA编译器(javac.exe)的作用是将java源程序编译成中间代码字节码文件,是最基本的开发工具。
编译时首先读入java源程序(即在MS-DOS命令行下键入javac HelloWorld.java等文件名参数和其他选项参数),然后进行语法检查,如果出现问题就终止编译。语法检查通过后,生成中间代码即字节码,字节码文件名和源文件名相同,扩展名为.class。—来自百度百科
javac.exe可以简单看成是Java编译器。
其中运行时数据区如下:
堆和方法区是线程共享的,Java栈,本地方法栈,程序计数器是线程私有的。
我的简单理解:
1.Java栈部分,存放一些栈帧,栈帧内容如下:
a.栈帧: 线程执行一个方法时,就会随之创建一个对应的栈帧,并将建立的栈帧压栈。当方法执行完毕之后,便会将栈帧出栈。
b.局部变量表:存放局部变量,包括在方法中声明的非静态变量以及函数形参。基本类型数据直接存,引用类型的数据存地址,栈指向堆可能是这个意思。
2.本地方法栈,是为执行本地方法(Native Method)服务的。
a.本地方法:一个Native Method就是一个Java调用非Java实现的方法,为什么要调用非Java实现的方法,参考这里,第二部分。
3.程序计数器
4.堆用来存储对象本身的以及数组,引用放在栈中。
5.方法区,存放类的信息,编译后的代码,Java虚拟机描述为堆的一个逻辑部分。
- Java的基本类型
一共有8种:
数值型(6):byte(8位),short(16位),int(32位),long(64位),float(32位),double(64位)
字符型(1):char(16位)
布尔型(1):boolean(1位)
推荐文章:
一个具体例子分析jvm及类加载过程:https://www.cnblogs.com/qiumingcheng/p/5398610.html
参考:
图片来源:https://blog.csdn.net/wanderlustLee/article/details/80762851
JVM 栈和栈帧:https://blog.csdn.net/myle69/article/details/80379137
jvm讲解:https://www.cnblogs.com/dolphin0520/p/3613043.html
本地方法:https://blog.csdn.net/dengshusheng2/article/details/79977232