java内存模型的进阶
2019-03-07 本文已影响29人
DaemonXiao
JVM三大性能调优参数-Xms -Xmx -Xss的含义?
java指令:java- Xms128m -Xmx128m -Xss256 -jar xxxx.jar
- Xss:规定了每个线程虚拟机栈的大小,影响线程大小
- Xms:堆的初始值
- Xmx:堆能达到的最大值
Java内存中堆和栈的区别?
存放内容:堆存放对象,栈存放指针(引用变量:指向堆地址),变量
管理方式:栈自动释放,对需要GC
空间大小:栈比堆小
碎片相关:栈产生的碎片远小于堆
分配方式:栈支持静态和动态分配,而堆支持动态分配
效率:栈的效率高
简单说说String的intern()方法
对于这个方法实在是很少用过,但它却是一个极为重要的方法,在理解java内存模型中。
String s = new String("abcf");
s.intern();
上述代码含义就是,(简单版)创建一个s字符串对象,然后把它的引用添加到常量池(也在堆中)。
(复杂版)JDK6:当调用intern方法时,如果字符串常量池先前已穿件出该字符串对象,则返回池中的该字符串的引用。否则,将此字符串添加到字符串常量池中,并返回该字符串对象的引用。
JDK6+:当调用inter方法时,如果字符串常量池先前已创建出该字符串对象,则返回池中的引用。否则,如果该字符串对象已经存在Java堆中,则将堆中此对象的引用添加到字符常量池中,并返回该对象引用;如果堆中不存在,则在池中创建该字符串并返回其应用。
Object的finalize()方法的作用是否与C++的析构函数作用相同?
- 不同,析构函数调用确定,而finalize是不确定的
- 将未被引用的对象放置于F-Queue队列
- 方法执行随时可能会被终止
- 基于对象最后一次重生的机会