jvm
文章平均质量分 92
q435201823
11
展开
-
Java内存-运行时数据区域
概述 Java虚拟机将他所管理的内存划分为若干个不同的数据区域。如下图蓝色框以内。 主要有: 1.程序计数器 2.Java虚拟机栈 3.本地方法栈 4.Java堆 5.方法区 6.运行时常量池(是方法区一部分) 7.直接内存 程序计数器 程序计数器是一块较小的内存空间。简单的讲,里面存储的就是当前下一个要执行的指令的位置。 如果正在执行的是Native方法(java可以调用其他语言的方法,这就是...原创 2019-03-26 11:23:03 · 96 阅读 · 0 评论 -
java垃圾收集器概论
java垃圾收集器Serial收集器ParNew收集器Parallel Scavenge收集器 Serial收集器 Serial是一个单线程的收集器。单线程并不仅仅说明只使用一个CPU,更重要的是必须暂停所有其他工作(Stop the world)。 好比“你妈妈在为你打扫房间的时候,你不能再一旁乱扔纸屑,这样房间是打扫不完的”。 优点:简单而高效(与其他收集器的单线程相比),在限于单个CPU的环...原创 2019-04-02 11:21:33 · 83 阅读 · 0 评论 -
内存分配与回收策略
内存分配与回收策略对象优先在Eden分配大对象直接进入老年代长期存活对象将进入老年代动态对象年龄判定内存分配担保 对象优先在Eden分配 大多数情况下,对象在新生代Eden区中分配。没有足够空间时,触发Minor GC。 大对象直接进入老年代 大对象对虚拟机的内存分配是个坏消息。遇见刚出生就死的大对象是个更坏的消息。 大对象容易导致内存空间还有不少就提前触发了GC,来安置大对象。 大对象在区域之间...原创 2019-04-02 11:58:58 · 275 阅读 · 0 评论 -
Java虚拟机-对象
对象的创建 1.虚拟机遇到一条new指令,先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否被加载,解析和初始化。如果没有,那必须先执行相应的类加载过程。 2.类加载检查通过后,虚拟机为新生对象分配内存。 3.内存分配完后,将分配到的内存空间全部初始化为0(不包括对象头)。 4.根据虚拟机运行状态不同,作具体操作,如是否启用偏向锁,对象头会有不同设置方式等。...原创 2019-03-28 21:44:14 · 90 阅读 · 0 评论 -
java虚拟机是如何确认对象是否存活的?
确认对象是否存活的算法有两种引用计数法和可达性分析算法 引用计数法 给对象中添加一个应用计数器,每当对象被引用,计数器就+1,当引用失效时,计数器-1。计数器为0的对象不可能再被使用。 缺点:很难解决对象之间循环引用,比如父类引用子类,计数器不可能为0。 可达性分析 简而言之,在可达性分析算法中,不与GC Roots联通的节点,即为需要回收的对象。如object567。 这个算法的主要思路就是通...原创 2019-03-28 22:24:25 · 129 阅读 · 0 评论 -
JVM虚拟机 垃圾回收算法
标记-清除算法 标记所有要回收的对象,然后统一回收。 不足:1.标记和清除的效率都不高。 2.会产生大量不连续的碎片。 3.在碎片中无法找到足够的连续内存又会触发垃圾回收。 复制算法 将内存分为两块,每次只使用其中一块。当这一块用完了,将所有存活对象复制到另一块上,然后将这一块的内存全部清理掉。 缺点:分为两半是在是太多了。因为很多对象刚刚被引用就死了,所以1:1不明智。浪费了50%的内存。 ...原创 2019-03-28 23:08:18 · 150 阅读 · 0 评论