jvm
FelixClinton
这个作者很懒,什么都没留下…
展开
-
java虚拟机学习之(七)常见垃圾收集器
在此之前我们已经介绍了Hotspot虚拟机如何去发起内存回收,介绍了如何判断对象是否存活,介绍了垃圾回收的各种算法,对比了这些算法 的优缺点,但是虚拟机如何具体的进行垃圾回收动作仍然未涉及,因为内存回收如何进行是由虚拟机所选用的GC收集器而决定的,而通常虚拟机中往往不止一种GC收集器。下面我们来对一些常用的垃圾收集器进行对比介绍。1.Serial收集器Serial收集器是最基本、发展历史最悠久的收...原创 2018-03-18 17:08:33 · 112 阅读 · 0 评论 -
java虚拟机学习之(九)虚拟机性能监控与故障处理工具
作为java程序开发人员,在程序开发过程中或者程序开发完成之后,总是避免不了需要对自己开发的代码进行各种测试,寻找各种bug,对程序进行优化。一听到bug和优化,很多人包括我自己都会感到头皮发麻,我们总是期望自己写的代码近乎完美,没有bug且性能优越,但这常常是事与愿违,总免不了折腾。下面介绍一些常用的工具,以帮助我们更快的完成代码的调试调优工作。1.JDK的命令行工具很多java开发人员肯定知道...原创 2018-03-20 15:55:03 · 179 阅读 · 0 评论 -
java虚拟机学习之(八)内存分配策略
java技术体系中所提倡的自动内存管理最终可归结为自动化的解决给对象分配内存和回收分配给对象的内存。关于回收内存,我们已经在之前的学习中进行了详细的介绍,下面介绍一下给对象分配内存的相关知识。对象内存的分配,从大的方向上来说是在java堆上分配(但也可能经过JIT(Just In Time)编译器编译后被拆散为标量类型并间接的在栈上分配)。对象主要分配在新生代的Eden上,如果启动了本地线程缓冲,...原创 2018-03-19 20:59:49 · 140 阅读 · 0 评论 -
java虚拟机学习之(六)HotSpot虚拟机垃圾收集
java虚拟机学习之(五)垃圾收集器与垃圾回收算法(http://blog.csdn.net/qq_28044241/article/details/79520481)已经介绍了对象存活判定的算法和垃圾收集算法。下面将以HotSpot虚拟机为例,讲述真实情况下虚拟机垃圾回收的相关知识。1.枚举根节点从可达性分析中从GC Roots 节点找到引用链这个操作为例,可作为GC Roots的节点主要在全局...原创 2018-03-14 19:48:00 · 132 阅读 · 0 评论 -
java虚拟机学习之(二)java对象的创建过程
java是一门面向对象的编程语言,在java程序运行的过程中无时无刻不在产生新的对象。在语言层面,java普通对象的创建仅仅是一个new关键字而已,而在虚拟机中,对象的创建(不包括数组和Class对象)又是一个怎样的过程呢??Step1:当虚拟机遇到一条new指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否被加载、解析和初始化过,如果没有,那必...原创 2018-03-09 16:39:21 · 150 阅读 · 0 评论 -
java虚拟机学习之(五)垃圾收集器与垃圾回收算法
经过前面是学习我们已经对java运行时区域的各个部分有了一定的了解,其中程序计数器,虚拟机栈,本地方法栈3个区域属于线程私有区域,它们随着线程的创建而存在,随着线程的死亡而释放。栈中的栈帧随着方法的进入和退出也在有条不紊的进行着入栈和出栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此上述区域的内存分配和回收都是确定的,一旦方法结束或者线程结束,相应的内存自然也就被回收了。而...原创 2018-03-11 21:59:43 · 748 阅读 · 0 评论 -
java虚拟机学习之(四)对象访问定位
创建对象是为了访问对象,那么对象是通过何种方式被访问的呢?前面我们已经对对象的创建过程进行了介绍,但是对于对象的信息的存储位置可能还是不太清楚。下面就先介绍一下对象创建过程中,对象在内存区域的存储,以便我们了解对象的访问。1.对象创建回顾Object obj = new Object();现在假设上述语句出现在方法体中,“Object obj”这部分将会反应到java栈的本地变量表中,作为一个re...原创 2018-03-11 14:53:23 · 169 阅读 · 0 评论 -
java虚拟机学习之(三)对象的内存布局
在HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头、实例数据和对齐填充。对象头:包含两个部分,第一部分用于存储对象自身的运行时数据,如哈希值,GC分代年龄、锁状态标志等;第二部分是类型指针,即指向它的类的元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。如果对象是一个java数组,那在对象头中还必须有一块用于记录数组长度的数据,因为java虚拟机可以通过普通对象的...原创 2018-03-10 21:06:32 · 230 阅读 · 0 评论 -
java虚拟机学习之(一)java内存区域
原创 2018-03-09 14:43:55 · 134 阅读 · 0 评论 -
java虚拟机学习之(十)java内存模型
“内存模型”,可以理解为在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象,就像物理计算机中由一开始的CPU—内存交互访问发展到CPU—高速缓存—内存三层交互访问,这也是物理计算机内存模型,不同架构的物理机器可以拥有不一样的内存模型,而java虚拟机也有自己的内存模型。java内存模型,java虚拟机规范中定义的一种用来屏蔽各种硬件操作和操作系统访问差异,以实现java程序在各种平台...原创 2018-03-21 22:33:26 · 130 阅读 · 0 评论