JVM
文章平均质量分 70
梅啉豆
写点自己的总结也不错~
展开
-
运行时数据区
上图是jvm运行时的数据区域:浅色部分代表的是线程共享区域,即多个线程会共享其中的数据资源,如多线程操作时对堆数据的共享。深色部分代表的是线程私有的资源,如不同线程中方法的调用在栈中的进行是线程私有的,其它线程不能访问本线程调用的方法运算。1.程序计数器 这是一块较小的内存空间,作用是看作当前线程所执行的字节码的行号指示器。每条线程有一个自己私有的独立的程序计数器,独原创 2018-01-21 08:25:02 · 265 阅读 · 0 评论 -
Java内存模型
参考网址:http://blog.csdn.net/suifeng3051/article/details/52611310原创 2018-01-22 08:05:06 · 179 阅读 · 0 评论 -
虚拟机字节码执行引擎
执行引擎在执行Java代码的时候,可能有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也可能是二者兼备。所有引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是结果。栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构。它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素原创 2018-01-22 08:04:43 · 193 阅读 · 0 评论 -
虚拟机类加载机制
虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型。1.类加载时机类从呗加载到内存中开始,到卸载出内存为止,经历7个阶段,为1个生命周期。 加载、验证、准备、初始化、卸载这五个阶段的顺序是确定的,其余常是互相交叉进行。对加载阶段,虚拟机规范中并没有进行强制约束,这点可以交给虚拟机的具体实现来自由原创 2018-01-22 08:04:24 · 349 阅读 · 0 评论 -
class类文件结构
class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在class文件之中,中间没有添加任何分隔符。 根据java虚拟机规范的规定,class文件格式采用一种类似于C语言结构体的伪结构来存储,这种伪结构有两种数据类型。无符号数属于基本的数据类型,以u1、u2、u4、u8来分别代表1、2、4、8个字节的无符号数,可用来描述数字、索引引用、数量值、或者按照U原创 2018-01-22 08:04:10 · 284 阅读 · 0 评论 -
虚拟机性能监控与故障处理工具
1.jps:虚拟机进程状况工具 可以列出正在运行的虚拟机进程,并显示虚拟机执行类(Main Class,main()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID(LVMID,Local Virtual Machine Identifier)。2.jstat:虚拟机统计信息监视工具 用于监视虚拟机各中运行状态信息的命令行工具,可以显示本地或远程虚拟机进程原创 2018-01-22 08:03:55 · 249 阅读 · 0 评论 -
内存分配与回收策略
对象的内存分配,往大方向上讲,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接的在栈上分配),对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的,其细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数设置。几种内存分配机制:1.对象原创 2018-01-22 08:03:32 · 353 阅读 · 0 评论 -
垃圾收集器
1. Serial收集器是最基本、发展最久的收集器,是一个单线程的收集器。只会使用一个CPU或一条收集线程去完成垃圾收集工作,在进行垃圾收集时,必须暂停其它所有的工作线程,直到它结束。 2.ParNew收集器是Serial收集器的多线程版本。 3.Parallel Scavenge收集器是一个新生代的收集器,使用复制算法,也是并行的收集器原创 2018-01-22 08:03:00 · 198 阅读 · 0 评论 -
垃圾收集算法
1.标记-清除算法是最基础的收集算法,分为“标记”和“清除”两个阶段:先标记所有需要回收的对象,标记完成后统一回收掉所有被标记的对象。 主要有两方面的不足:效率不高,两个过程的效率都不高。会产生大量不连续的内存碎片,空间碎片太多,可能会导致当程序在以后的运行过程中需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾回收操作。2.复制算法为解决效率问原创 2018-01-21 08:26:15 · 223 阅读 · 0 评论 -
回收对象判断方法
1.java堆中判断对象存活还是死亡的算法1.1 引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就会加1,当引用失效时,计数器值就减1,任何时刻计数器都为0的对象就是不可能再被使用的。然而,在一些案例中,java对象存在互相引用的情况,虚拟机依然回收了他们,也就从侧面说明了虚拟机并不是通过引用计数算法来判断对象是否存活的。1.2 根搜索原创 2018-01-21 08:25:34 · 368 阅读 · 0 评论 -
类的实例化顺序
类的实例化顺序: 比如父类静态数据、构造函数、字段、子类静态数据、构造函数、字段,它们的执行顺序。遵循先静态先父后子原则:父类中static代码块,子类中的static顺序执行父类的普通代码块父类构造器子类普通代码块子类构造器,按顺序执行子类方法的执行public class Test { public static void main(String[]原创 2018-01-22 08:17:44 · 2735 阅读 · 0 评论