一、谈谈你对java的理解
(1)平台无关性:一次编译,到处运行
javac编译-》生成字节码class文件(二进制的,可使用javap进行反编译查看具体内容)-》字节码内容加载进内存(机器可执行的机器码)
所谓的字节码,就是 Java 程序经过编译之类产生的.class 文件,字节码能够被虚拟机识别,从而实现 Java 程序的跨平台性。
Java 程序从源代码到运行主要有三步:
- 编译:将我们的代码(.java)编译成虚拟机可以识别理解的字节码(.class)
- 解释:虚拟机执行 Java 字节码,将字节码翻译成机器能识别的机器码
- 执行:对应的机器执行二进制机器码
只需要把 Java 程序编译成 Java 虚拟机能识别的 Java 字节码,不同的平台安装对应的 Java 虚拟机,这样就可以可以实现 Java 语言的平台无关性。
(2)GC垃圾处理机制
(3)语言特性
(4)面向对象:封装、继承、多态
(5)类库
(6)异常处理
二、jvm如何加载.class文件
JVM结构:四个部分
(1)class loader :依据特定格式加载class到内存
Java程序(class文件)并不是本地的可执行程序。当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class加载到JVM里头运行,负责加载Java class的这部分就叫做Class Loader。
(2)Native Iterface:本地接口,融合不同开发语言为java所用
(3)Execution Engine:对命令进行解析
(4)Runtime Data Area:JVM内存空间模型
三、jvm三大性能调优参数
-Xss:规定了每个线程虚拟机栈(堆栈)的大小
-Xms:堆的初始值
-Xmx:堆能达到的最大值
四、java内存模型中的堆和栈的区别-内存分配策略
静态存储:编译时确定每个数据目标在运行时的存储空间需求
栈式存储:数据区需求在编译时未知,运行时模块入口前确定。
堆式存储:编译时或运行时模块入口都无法确定,动态分配。
五、java内存模型中堆和栈的区别和联系
(1)联系:引用对象、数组时,栈里定义变量保存堆中目标首地址。
(2)区别:
管理方式:栈自动释放,堆需要GC
空间大小:栈比堆小
碎片相关:栈产生的碎片远远小于堆
分配方式:栈支持静态和动态分配,而堆仅支持动态分配
效率:栈效率比堆高