JVM
zjg_java
努力学习的小菜鸡
展开
-
重识JVM(六):内存分配原则
对象的内存分配,就是在堆上分配,对象主要分配在新生代的Eden 区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB 上分配。少数情况下也可能直接分配在老年代中,分配的规则不是固定的,其细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数设置。下面会讲解几条最普遍的内存分配原则。对象优先在Eden 分配大多数情况下,对象在新生代Eden 区中分配。当Eden 区没有足够...原创 2020-03-12 22:23:39 · 302 阅读 · 1 评论 -
重识JVM(五):垃圾收集器
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现了。基于HotSpot 虚拟机的所有收集器如图所示:上图中展示了7种用于不同分代的收集器,两个收集器之间存在连线的,就说明它们可以搭配使用。下面让我们来一个一个了解一下它们吧。Serial 收集器Serial 是最基本、历史最悠久的垃圾收集器,使用复制算法。Serial 是一个单线程的收集器,它不仅仅只会使用...原创 2020-03-12 18:39:20 · 109 阅读 · 0 评论 -
重识JVM(四):GC
垃圾收集(GC)是java的重中之重,相信大家很多人喜欢使用java语言进行开发,就是因为喜欢这一特性吧。要了解垃圾收集,那么我们肯定得弄明白三个问题:(1)哪些内存需要回收?(2)什么时候回收?(3)如何回收?1.哪些内存需要回收?堆里存放着几乎所有对象实例,垃圾收集器在堆上进行回收之前,一定要做的事就是要确认哪些对象还“存活”,而哪些对象已经“死亡”了,这些已经死亡的对...原创 2020-03-11 18:42:16 · 189 阅读 · 0 评论 -
重识JVM(三):OOM异常的常见处理思路
1.堆溢出Java 堆用于存储对象实例,只要不断增加对象,并且保证GC Roots 到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量达到最大堆的容量限制后就会产生OOM 异常。要解决这个区域的异常,一般的手段是通过内存映像分析工具对dump 出来的堆转储快照进行分析,重点是确认内存中的对象是否是必要的,也就是要判断是出现来内存泄露(不必要)还是内存溢出(必要)。前者的话要...原创 2020-03-09 23:07:35 · 231 阅读 · 1 评论 -
重识JVM(二):虚拟机对象相关
1.对象的创建在语言层面,创建一个对象通常是new一个关键字,那么在java虚拟机中,对象的创建过程又是怎样的呢?原创 2020-03-09 16:36:22 · 85 阅读 · 0 评论 -
重识JVM(一):运行时数据区域
记得上一次看jvm相关的知识还是在大四的时候,两年过去了,记忆已经逐渐模糊。现在来重识一下jvm,希望温故而知新,一些重要的知识点我会在博客上把学习的知识记录下来。想要了解jvm,就一定需要了解java虚拟机是如何使用内存的,要不在出现内存泄漏和内存溢出等问题时,我们是没法准确地排查出错误的,下面就让我一起来重新认识一下java虚拟机在执行java程序的过程中的运行时数据区。参照上图,...原创 2020-02-27 15:47:49 · 153 阅读 · 0 评论