对java的疑点笔记
java特性
a 平台无关性(跨平台,一次编译,处处运行)
b GC(自动处理,不必像c++需要手动释放堆内存)
c 语言特性 (泛型、反射、Lambda表达式、、、)
d 面向对象(封装、继承、多态)
e 类库
f 异常处理
Compile one,Run Anywhere 如何实现?
编译期,javac指令,编译源码生成字节码,并存入对应的.class文件中
主要原因:java提供了各种平台的虚拟机,jvm解析字节码转换成特定平台的执行指令,eg:JVM For Linux,JVM For Win ,JVM For IOS
实现过程: java源码首先被编译成字节码,再由不同平台的jvm进行解析,Java语言在不同的平台上运行时不需要进行重新编译,Java虚拟机在执行字节码的时候,把字节码转换成具体平台上的机器指令。
java的反射
java反射机制实在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
JVM架构(组成)
JVM主要由:1、ClassLoader 2、Runtime Data Area 3、Execution Engine 4、Native Interface这四个部分组成。
关于ClassLoader
a 介绍:ClassLoader是java的核心组件,主要作用是从系统外部获得Class二进制数据流,负责通过将Class文件里的二进制数据流装载进系统,然后交给Java虚拟机进行连接、初始化等操作。
b ClassLoader的种类 (四者之间存在 父类委托机制),从高(父)到低(子)分别是: BootStrapClassLoader、 ExtClassLoader、AppClassLoader(加载程序所在目录)、自定义ClassLoader
类加载的方式
1、隐式加载:new
即隐式调用类加载器加载对应的类到jvm中
2、显示加载:
ClassLoader.forName,调用newInstance生成对象实例,该实例方法newInstance不支持传入参数
Java内存模型中堆和栈的区别–内存分配策略
区别:
a 管理方式: 栈自动释放,堆需要GC
b 空间大小: 栈比堆小
c 碎片相关: 栈产生的碎片远小于堆
d 分配方式:栈支持静态和动态分配,而堆仅支持动态分配
e 效率:栈的效率比堆高
堆与栈的联系:
引用对象、数组时,栈里定义变量保存堆中目标的首地址
堆空间最大的特点:实现动态分配(双向链表结构)