1. JVM三大调优参数 -Xms -Xmx -Xss的含义?
-Xss : 每个线程虚拟机栈以及堆栈的大小,常用配置256k,影响并发线程数大小;
-Xms : 初始堆大小;
-Xmx : 堆能达到的最大值;
2. Java内存模型中堆和栈的区别.
1. 首先讲明白的这个问题,就需要明白内存分配策略;通常内存分配策略有三种:①静态的,②栈式的,③堆式的;
静态类型 : 编译时确定每个数据目标在运行时的存储空间;
栈式类型 : 数据区需要在编译时未知,运行时且在进入程序模块前确认;
堆式类型 : 编译时或运行时都未知,然后通过动态分配;
2. 其次还需要明白堆和栈之间的联系,引用对象以及数组时,栈里定义变量来保存堆中的首地址;
3. 在明白了以上两点以后他们之间的区别就显而易见了:
管理方式不同 : 栈自动释放,堆需要等待GC;
空间大小 : 栈比堆小;
碎片相关 : 栈产生的碎片远小于堆;
分配方式 : 栈支持静态和动态分配,堆只支持动态分配;
效率不同 : 栈比堆效率高;
3. 元空间和堆以及线程独占部分之间的联系.
元空间 : 当类被加载进来的时候,元空间中存储类相关信息(方法以及属性等);
堆 : 当类被创建的时候,堆中主要存储的是类对象实例;
线程独占部分 : 当程序运行时,JVM会分配虚拟机栈以及程序计数器等并且存储地址引用;
4. 不同JDK版本之间intern()方法的区别?
JDK6 : 当调用intern方法时,如果字符串常量池先前已创建出该字符串对象,则返回池中的该字符串的引用.否则,将此字符串对象添加到字符串常量池中,并且返回该字符串对象的引用;
JDK6+ : 当调用intern方法时,如果字符串常量池先前已创建出该字符串对象,则返回池中的该字符串的引用.否则,如果该字符串对象已经存在于Java堆中,则将堆中对此对象的引用添加到字符串常量池中,并且返回该引用;如果堆中不存在,则在池中创建该字符串并返回其引用.