- 内存:
堆区 | 1.new的对象实例 ps:(java堆可以细分为新生代和老年代)(通过-xmx和-xms来实现可扩展) |
虚拟机栈 |
局部变量 |
本地方法栈 | 为虚拟机使用的native方法服务 |
方法区 | static变量、类信息、常量 |
程序计数器 | 当前线程所执行的字节码的行号指示器 |
- 怎么判断是不是垃圾:
引用计数法
可达性分析(判断和GCroot有没有通路)
哪些对象可作为GC roots对象1.虚拟机栈中引用的对象2.本地方法栈中引用的对象3.方法区的static成员或者常量引用的对象。
- 垃圾收集器:
G1:整体标记整理,局部复制
特点:并行于并发、分代收集、空间整理(整体标记-整理;局部复制)、可预测的停顿
CMS:标记清除算法
缺点:1.对cpu资源非常敏感2.无法处理浮动垃圾3.基于“标记-清除”,会有大量的空间碎片产生
优点:并发收集、低停顿
垃圾清除算法:1.标记清除2.复制3.标记整理
- 类加载:
双亲委托(委托父类的类加载器,优点:使用更稳定的父类的包进行加载)
假如你有一个类abc.class要加载,首先加载这个类的请求由Application类加载器委托给它的父类加载器Extension类加载器;
优点:提高软件系统的安全性。因为在此机制下,用户自定义的类加载器不可能加载本应该由父类加载器加载的可靠类(从而防止不可靠的恶意代码代替由父类加载器加载的可靠代码)
- 内存泄漏与内存溢出
内存泄漏:是指程序在申请内存之后,无法释放已申请的内存空间。
内存溢出:指程序申请内存时,没有足够的内存共申请者使用
- 程序计数器有什么用?
当前线程所执行的字节码的行号指示器;字节码解释器工作时就是通过改变这个计数器的值来选择下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器完成。