深入理解Java虚拟机
文章平均质量分 89
bug_lover_liao
逐梦北京实习中。。。
展开
-
Java内存区域和内存溢出异常
Java运行时内存区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。如图2-1所示 程序计数器(Program Counter Register):程序计数器是一块较小的内存空间。它可以看作是当前线程所执行的字节码的行号指示器。系统运行时,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响。线程执行Java方法时,程序计数器记录的是虚拟机正在执...原创 2018-06-09 10:07:16 · 297 阅读 · 0 评论 -
垃圾收集器与内存分配策略
进行垃圾回收的时候肯定是要回收那些已经“死掉”的对象。所以以下就有了几个问题:(1)哪些对象是死掉的(或者说是哪些对象需要去回收)?(2)什么时候去回收?(3)如何去回收?判断对象是否死亡有引用计数法和可达性分析两种方法。引用计数法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0 的对象就是不可能再被使用的。缺点:当两个对象存在...原创 2018-06-09 10:31:07 · 468 阅读 · 0 评论 -
虚拟机类加载机制
类的生命周期类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化 (Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中验证、准备、解析3个 部分统称为连接(Linking),这7个阶段如下所示: 类加载的过程1、...原创 2018-06-09 10:36:41 · 271 阅读 · 0 评论 -
Java内存模型与线程
硬件效率与一致性由于存储设备和处理器运算速度之间的存在巨大的差异,现在计算机系统在内存与处理器之间加入高速缓存来作为处理器与内存之间的缓冲。将处理器需要的数据复制到缓存中,让处理器可以快速的获取数据进行计算,计算结束后再从缓存同步带内存中去,这样处理器无需等待缓慢的内存读写。如此看似美好,但引入了一个新的问题:缓存的一致性。在一个多处理器系统中,每个处理器有自己的高速缓存,它们共享同一主存,这样在...原创 2018-06-09 11:13:29 · 1143 阅读 · 0 评论 -
线程安全与锁优化
线程安全并发是计算机“压榨”计算机运算能力的一个强力武器,但是并发的到来也就引入的线程安全的问题。《深入理解Java虚拟机》的作者对线程安全的定义是:“当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的”。这个定义比较严谨。我对线程安全定义的简单理解...原创 2018-06-09 11:25:00 · 344 阅读 · 0 评论