JVM
文章平均质量分 70
Alone枫叶
世界上有10种人,一种懂二进制,一种不懂二进制。
展开
-
Java内存区域与内存溢出异常
1.程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。 为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。 此内存区域是唯一一个在Jav原创 2017-09-10 23:27:39 · 199 阅读 · 0 评论 -
Java虚拟机类加载机制
Java虚拟机类加载机制Class文件中存储了类(或接口)中的元数据信息和编译后的字节码。这些信息需要存入Java虚拟机中才能被虚拟机利用和执行。而Class文件是需要Java虚拟机加载到虚拟机内存中的。这就涉及到几个问题,什么时候需要加在一个Class文件?虚拟机如何加载Class文件到虚拟机内存中?Class文件中的信息进入虚拟机内存中后会发生怎么样的变化?1、概述虚拟机把描述类的...原创 2019-03-04 14:44:13 · 178 阅读 · 0 评论 -
深入理解volatile关键字
Volatile关键字在了解了JMM之后,就可以深入了解以下volatile关键字的工作机制了。volatile关键字的两层语义一旦一个共享变量(类的成员变量,类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这个新值对其他线程来说是立即可见的(volatile的特殊规则保证了新值能立即同步...原创 2019-03-09 14:00:36 · 253 阅读 · 0 评论 -
浅析Java内存模型JMM
Java内存模型在并发编程中,多个线程之间采用什么机制通信(信息交换),什么机制进行数据的同步?为了解决这些疑惑,就很有必要了解java的内存模型,在Java语言中,采用的是共享内存模型来实现多线程之间的信息交换和数据同步的。线程之间通过共享程序公共的状态,通过读-写内存中公共状态的方式来进行隐式的通信。同步指的是程序在控制多个线程之间执行程序的相对顺序的机制,在共享内存模型中,同步是...原创 2019-03-09 11:48:26 · 310 阅读 · 0 评论 -
垃圾收集与分配策略——(五)内存分配与回收策略
内存分配与回收规则 内存分配与回收规则由垃圾回收器和内存有关参数决定,不是固定的。 两个概念: MinorGC,次收集:在新生代发生的垃圾收集,速度快,发生频繁。 FullGC,MajorGC,主收集:发生在年老代的垃圾收集。一般伴随一次MinorGC。 一般的规则: 对象优先在Eden分配。当Eden没有原创 2017-09-29 00:13:40 · 279 阅读 · 0 评论 -
垃圾收集与分配策略——(四)垃圾收集器
垃圾收集器 先看java堆内存结构,适用于非G1收集器外的垃圾收集器: 首先根据java对象的生存周期长短把java堆内存分成老年代和年轻代,新年代大小可以通过参数-Xmn10M来控制;然后年轻代又被分成3块,一个Eden区,两个大小相等的survivor区,Eden区和Survivor区的大小可以通过参数 -XX:SurvivorRa原创 2017-09-29 00:05:42 · 250 阅读 · 0 评论 -
垃圾收集与分配策略——(三)HotSpot的算法实现
HotSpot算法实现 枚举根节点 在可达性分析中,可以作为GC Roots的节点有很多,但是现在很多应用仅仅方法区就有上百MB,如果逐个检查的话,效率就会变得不可接受。 而且,可达性分析必须在一个一致性的快照中进行-即整个分析期间,系统就像冻结了一样。否则如果一边分析,系统一边动态表化,得到的结果就没有原创 2017-09-28 23:44:50 · 349 阅读 · 0 评论 -
垃圾收集与分配策略——(二)垃圾收集算法
1.标记-清除算法(Mark-Sweep) 原理:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。 缺点:1)效率问题,标记和清除两个过程的效率都不高; 2)空间问题,会产生大量不连续的内存碎片。2.复制算法 原理:先把内存分为大小相等的二个部分,每次只使原创 2017-09-28 23:31:36 · 246 阅读 · 0 评论 -
垃圾收集器与内存分配策略——(一)对象已死吗?
1.对象已死吗? 在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象中那些还“存活”,那些已经“死去”。 1.1引用计数算法 通常的描述:给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。原创 2017-09-28 14:53:29 · 237 阅读 · 0 评论 -
Java类文件结构
代码编译的结果从本地机器码转变为字节码,是存储格式的一小步,确实编程语言发展的一大步。无关性的基石各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码(ByteCode),实现语言无关性的基础仍然是虚拟机和字节码存储格式。Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联。Java语言中的各种变量,关键字和运算符号的...原创 2019-05-26 10:55:25 · 212 阅读 · 0 评论