![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
sky@梦幻未来
这个作者很懒,什么都没留下…
展开
-
JVM笔记(三)垃圾收集器与内存分配策略
程序计数器、虚拟机栈、本地方法栈这三个区域在线程运行时每个栈帧所分配的内存,在类结构确定下来时就已经确定。而java堆和方法区只有在程序运行时才知道创建哪些对象,内存分配和回收是动态的 一、怎样判断对象已死 1.引用计数算法 给每个对象分配一个引用计数器,对象每多一个引用计数器加1,损失一个引用计数器减1。缺点就是它无法解决对象之间相互引用的问题,例如:objA.instance=objB及objB.instance=objA,这种情况对象虽然无法再访问,但是计数器却不为0,对象无法回收。 优点是实现简单,原创 2020-09-24 16:15:16 · 148 阅读 · 0 评论 -
JVM笔记(二)OutOfMemoryError与StackOverflowError异常
在Java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(OOM)异常的可能 一、Java堆溢出 垃圾回收的标准是:GC Roots到对象之间没有可达路径即可回收。当对象数量到达堆所能容下的最大限制后就会产生内存溢出异常。 代码测试如下: /** * VM Args:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError */ public class HeapOOM { static clas原创 2020-09-24 15:02:56 · 273 阅读 · 0 评论 -
JVM笔记(一)对象访问方式
方式一 使用句柄访问方式 该方式优势是reference中存储的是稳定的句柄地址,在对象被移动(垃圾收集时移动对象是非常普遍的行为,复制算法,标记整理,标记清除都需要移动对象)时只会改变句柄中的实例数据指针 方式二 使用直接指针访问对象(主流虚拟机sun HotSpot使用该方式) 该方式优势是速度快,它节省了一次指针定位的时间开销(换句话说:不用先找到地址的地址,再找到地址,最后访问到对象。而是直接访问对象的地址去找对象),由于我们访问对象比较频繁,因此在开销上积少成多也能减少不少的成本。 学习资料:原创 2020-09-24 14:01:06 · 157 阅读 · 0 评论