JVM虚拟机基础
方法区与堆:
线程共享区域
方法区(又名永久区):
线程共享的区域
存放:类、常量、静态变量、即时编译器的代码;
存放static 方法 常量
会出错则会出现out of memory error
堆:
new对象;
存在 out of memory error问题;
占用内存最大;
对线程共享内存堆;new出来的对象太多又未回收及时,容易出现out of memory;或者new出来的大对象太多也容易出现堆溢出;
垃圾回收器:
算法:
分代法:新生代、Eden、from、to、老年代
判断是否是垃圾的算法有:可达性分析算法(即没有栈及方法区指向它(它们)则视为垃圾)
回收垃圾算法:
标记-清除算法:
缺点:内存碎片
复制算法:
用于新生代from-to 区
标记整理算法:
用于老年代
对象刚new出来存放的位置:一般放在Eden区,如果对象太大直接放在老年代
CMS收集器:串行
GGI:根据当前线程判断串行还是并行
虚拟机栈:出现 stack over flow error ,存放局部变量,方法帧
本地方法栈:一个线程独有的;当方法调用太深(嵌套太多),容易出现栈溢出
程序计数器:记录代码运行到的行数
直接内存:out of memory error 该部分内存不经过JVM中间件,程序直接通过系统调用
对象访问定位: