
【JVM】
Wang_Y_
Begin ....
展开
-
JAVA虚拟机:新生代和老年代GC
Java堆可以分为新生代和老年代两个区,其中新生代又可以分为一个Eden区和两个Survivor区,两个Survivor区分别被命名为From和To以示区分,新生代和老年代的比例为1:2,它们共同组成堆的内存区,所以新生代占堆的1/3,老年代占2/3,但这个比例可以修改,下面分别来介绍一下新生代和老年代。1、【新生代】新生代分为三个区域,一个Eden区和两个Survivor区,它们之间的比原创 2016-07-14 20:53:20 · 6542 阅读 · 4 评论 -
JAVA虚拟机:GC对象的判断方法
垃圾收集器在对堆进行回收钱,第一件事就是要确定这些对象之中那些还“存活”着,哪些已经“死去”(即不可能再被任何途径使用的对象)判断对象是否还存活有两种方法:1、引用计数法2、可达性分析法下面分别介绍这两种判断对象是否存活的算法1、引用计数法给对象中添加一个引用计数器,每当一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使原创 2016-07-14 21:51:04 · 953 阅读 · 0 评论 -
JAVA虚拟机:垃圾收集算法(标记清除算法、复制算法、标记整理算法、分代收集算法)
常见的垃圾收集算法有下面四种:1、标记清除算法;2、复制算法;3、标记整理算法;4、分代收集算法;下面介绍一下这几种算法的思想:1、标记清除算法标记清除算法分为标记和清除阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。它是最基础的收集算法,后续的收集算法都是基于这种思路对其不足进行改进而得到。它的不足有两个:一是效率问题,标记和清除两个原创 2016-07-14 22:20:54 · 1243 阅读 · 0 评论 -
JAVA虚拟机:类加载的过程
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用、卸载这七个阶段,其中验证、准备、解析3个部分统称为连接。类加载的全过程只有上述七个阶段中的五个阶段:加载、验证、准备、解析和初始化1、加载在加载阶段,虚拟机需要完成以下3件事情:通过一个类的全限定名来获取此类的二进制字节流;将这个字节流所代表的静态存储结构转化为方法区原创 2016-07-15 12:04:27 · 345 阅读 · 0 评论 -
JAVA虚拟机:Java内存模型
Java虚拟机规范中试图定义一种Java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一直的内存访问效果。在此之前,主流程序语言(如C/C++等)直接使用物理硬件和操作系统的内存模型,因此,会由于不同平台上内存模型的差异,有可能导致程序在一套平台上并发完全正常,而在另外一套平台上并发访问经常出错,因此在某些场景就必须针对不同的平台来编写程序。Java原创 2016-07-15 17:09:43 · 308 阅读 · 0 评论 -
JAVA虚拟机:JVM内存分区及用途
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区,这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。Java虚拟机所管理的内存将会包括以下几个运行时数据区域:1、程序计数器2、Java虚拟机栈3、本地方法栈4、Java堆5、方法区下面分别介绍各个内存分区及它原创 2016-07-14 19:38:35 · 4755 阅读 · 0 评论 -
JAVA虚拟机:垃圾收集器介绍
垃圾收集算法是内存回收的方法论,垃圾收集器是内存回收的具体实现。1、Serial 收集器该收集器是最基本、发展历史最悠久的收集器,这个收集器是一个单线程的收集器,它在工作时只会使用一个CPU或一条收集线程去完成垃圾收集工作,而且它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束;Serial收集器对于运行在Client模式下的虚拟机来说是一个很好的选择;2、ParNew 收集原创 2016-07-15 19:00:22 · 284 阅读 · 0 评论 -
JAVA虚拟机:对象的创建过程
简要说明的话,Java对象的创建过程分为下面几步:1、执行相关检查;2、为对象分配内存,将分配到的内存空间都初始化为零值;3、进行构造代码块和构造函数的初始化 下面详细介绍这几个步骤:1、执行相关检查虚拟机遇到一条new指令时,将会去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已被加载、解析和初试化过,如果没有,那必须先执行相应的原创 2016-07-15 10:46:45 · 1208 阅读 · 1 评论