面试题总结
2017-04-03 本文已影响0人
封若无灵
java内存模型:
程序计数器:用于保存当前正在执行的程序的内存地址。java虚拟机的多线程是通过轮流获取cpu时间片执行的,为了线程切换后能找到正确的位置。每个线程都需要一个独立的程序计数器。
本地方法栈:为虚拟机的Native方法服务。
堆:所有线程共享的一块内存区域。对象实例在这分配。
方法区:线程共享的区域。储存虚拟机加载的类信息。编译后的代码。常量,静态变量。
运行时常量池:代表运行时每个class文件中的常量表。包括几种常量:编译时的数字常量、方法或者域的引用。
StringBuffer是线程安全的StringBuilder是非线程安全的
类加载工作机制:
1.装载:将java二进制代码装入JVM,生成class文件。
2.连接:1 校验 检查class文件正确性 2 准备 给类的静态变量分配空间 3 解析 将符号引用转成直接引用。
3 .初始化:对类的静态变量,静态代码块,静态方法初始化。
双亲委派模型:类加载器收到类加载请求,首先将请求委派给父类加载器完成
hashcode 和equal 方法:
java集合要保证元素不重复 根据Object.equals方法判断,但是如果集合里有1000个元素就要执行1000遍equals方法,效率低,于是java采用哈希表的原理。