
JVM
信恒涛
这个作者很懒,什么都没留下…
展开
-
JVM——对象的内存布局
以Sun Spot 虚拟机为例子: 对象在虚拟机中存储布局分为三个区域:对象头、实例数据、对齐填充。下面从这三方面开始对象在内存中的布局分析: 1.对象头 对象头包含两个部分,第一部分是对象自身的运行时数据:例如哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等信息。第二部分是类型指针,即指向该对象类元数据的指针,虚拟机中是通...原创 2018-03-24 14:27:44 · 324 阅读 · 1 评论 -
JVM——对象的访问定位
在java程序中,我们访问对象的操作是非常频繁的。下面来介绍一下访问对象操作在内存中的对应过程。 我们知道,对象实例是存放在java堆中的,而我们new对象时,用一个变量接收新创建的对象,这个变量实际是存在java虚拟机栈中的,既然两个东西不在一个空间里,那怎么使用呢? 我们在程序中顶一个变量接收对象,这个变量其实就是虚拟机栈中的reference数据,这个refere...原创 2018-03-24 15:25:42 · 218 阅读 · 0 评论 -
JVM——引用计数算法和可达性分析算法——判断对象是否需要被回收
Java程序运行时,所有的实例对象都保存在Java堆里,而大量的实例对象会占用大量的内存空间,保证内存的可用性,需要对不用的对象进行垃圾回收,而进行垃圾回收之前最重要的就是判断某一个对象是否可以被回收,当一个对象不能再被任何途径访问,说明该对象已经没有用了。 下面介绍两种判断对象是否还会被引用的算法——引用计数算法和可达性分析法 引用计数算法: ...原创 2018-03-26 20:52:57 · 1532 阅读 · 1 评论 -
JVM——四种对象引用类型,决定对象在内存中生存的引用关系
在JDK1.2之后,Java将引用的概念进行了扩充,一共分为四类,对可达性分析法来判断一个对象是否还有用具有很大的意义。 一.强引用: 这是一种程序中普遍存在的引用关系,例如Object A = new Object(),这类引用只要还存在,对象就永远不会被回收。 二.软引用 这类引用用来描述一些还有用但是并不是必须的对象,存在软引用的对象会在系统要发生内存溢出时被回收掉。...原创 2018-04-02 20:18:48 · 303 阅读 · 0 评论 -
JVM——finalize()方法之对象存活最后的机会
内存中的对象要被回收至少要经过两次标记才能被回收掉。 我们说过可达性分析法来判断一个对象是否还会被引用,此时即使该对象已经没有任何引用链了,但是该对象也不一定会被回收,这样的对象需要先进行一步筛选,而又不是所有处于该状态的对象都会经过筛选,进行筛选的条件是该对象是否有必要执行finalize()方法,如果该对象没有覆盖finalize()方法或者虚拟机已经执行过该对象的finaliz...原创 2018-03-28 19:12:10 · 708 阅读 · 1 评论 -
JVM——方法区的内存回收
方法区的内存回收可以说是“性价比”较低的,因为方法区中需要被回收的资源很少,不像Java堆,Java堆中存放对象的实例,一次回收基本能达到70%--95%的内存回收。方法区中需要被回收的主要有废弃常量和无用的类。 废弃常量是否已经无用的判断是很容易的,但是对于类是否无用的判断就相对比较严格,判断类是否已经无用需要同时满足以下三点: 一.该类的实例已经全部别回收,即Jav...原创 2018-03-28 19:20:35 · 917 阅读 · 0 评论 -
JVM——垃圾收集算法
JVM中主要有一下几种垃圾收集算法: 一.标记-清除算法 这是一种最基础的算法,算法分为标记、清楚两个阶段,首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。 缺点:效率低,标记对象和清除对象两个阶段的效率都不高;空间利用率不高,标记清除之后可能会产生大量的不连续的内存碎片,当有一个很大的对象要分配空间时,就会找不到合适的内存给其分配,此...原创 2018-03-28 19:51:43 · 527 阅读 · 0 评论