Java虚拟机
夜雨落花
这个作者很懒,什么都没留下…
展开
-
volatile原理
1、内存可见性 volatile关键字可以使变量的改变,在线程间即时可见。1.1 Java变量的读写 Java实现工作内存和主内存同步的原子性操作:lock:作用于主内存,把变量标识为线程独占状态。 unlock:作用于主内存,解除独占状态。 read:作用主内存,把一个变量的值从主内存传输到线程的工作内存。 load:作用于工作内存,把read操作传过来的变量值...原创 2020-01-01 21:11:06 · 442 阅读 · 0 评论 -
Java GC新生代晋升老年代的情况
Java中对象一般在新生代中进行创建,但是在一定的机制中会触发晋升老年代的机制。相关机制包括:1、分配担保机制 Eden区满时,进行Minor GC,当Eden和一个Survivor区中依然存活的对象无法放入到Survivor中,则通过分配担保机制提前转移到老年代中。2、对象过大 若对象体积太大,新生代无法容纳这个对象,就会绕过新生代, 直接在老年代分配, 此...原创 2019-12-27 17:35:24 · 3238 阅读 · 0 评论 -
Java类加载
一、类加载的时机1、类加载的全过程 类加载的过程示意图: 其中,加载、验证、准备、初始化、卸载的开始顺序是确定的,而解析不一定,某些情况下可能在初始化阶段之后再开始,这是为了支持Java语言的运行时绑定。 需要注意的是,这只是开始的顺序,进行与结束的顺序并不一定。因为这些阶段通常都是互相交叉地混合式进行的,通常会在一个阶段执行的过程中调用激活另一个阶段。1...原创 2019-12-25 23:05:16 · 154 阅读 · 0 评论 -
java 虚拟机异常和try-catch的编译
一、虚拟机异常1、异常产生的原因 Java虚拟机会在以下三种情况抛出异常:字节码指令athrow被执行; 虚拟机同步检测到程序有非正常的执行情况,此时虚拟机会紧接着在非正常的操作执行后立刻抛出异常。非正常执行包括: 当字节码指令的操作违反了Java的语义,例如访问超出数组界限的索引; 在程序加载和链接的时候发送了异常。 由于以下原因导致了异步异常: 类Thread...原创 2019-03-04 16:32:02 · 546 阅读 · 0 评论 -
Java的垃圾回收器
本文只涉及垃圾回收器,对垃圾回收算法感兴趣请戳垃圾回收算法。 垃圾回收器的实现,跟厂商有很大关系。这里主要讨论基于JDK1.7 Update14之后的HotSpot虚拟机。新生代收集器使用的收集器:Serial、PraNew、Parallel Scaveng;老年代收集器使用的收集器:Serial Old、Parallel Old、CMS;以及G1收集器。图像来自互联网(侵...原创 2019-01-02 22:56:55 · 7323 阅读 · 0 评论 -
Java如何判断对象可被回收——可达性分析算法
垃圾回收是JVM应用程序至关重要的一部分。那么JVM如何判断一个对象是否能被回收呢?JVM判断对象能否被回收的方法,主要经历过如下两种算法。1、引用计数算法 引用计数(Reference Counting Collector)算法是垃圾收集器中的早期策略,现在其实没有主流语言在使用了。 在这种方法,堆中每个对象实例都有一个引用计数。当一个对象被创建,且被分配给一个变...原创 2019-01-02 22:56:55 · 605 阅读 · 0 评论 -
堆内存泄漏处理流程
最近项目的服务出现问题,查看grafana监控发现,服务挂掉前内存使用率极高,CPU使用率很低,推测是内存泄漏导致的。内存泄漏绝大多数是由堆内存泄漏导致的,所以直接使用JProfiler分析堆内存,最终查找到问题。这里分享一下,堆内存泄漏的处理流程。0、理论基础内存泄漏: 是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减...原创 2019-01-18 15:31:27 · 832 阅读 · 0 评论 -
Java的内存分配(运行时数据区)
根据《Java虚拟机规范》的规定,运行时数据区通常包括:程序计数器(Program Counter Register)、Java栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)、堆(Heap)。由于JVM规范中没有规定具体如何实现这些区域,所以不同的虚拟机厂商可以有不同的实现方式。1、程序计数器 程序计数器(Pro...原创 2018-12-10 23:21:23 · 152 阅读 · 0 评论 -
Java的垃圾回收算法
Java语言规范没有明确地说明JVM使用哪种垃圾回收算法,但是任何一种垃圾回收算法一般要做2件基本的事情:1)发现无用信息对象;2)回收被无用对象占用的内存空间,使该空间可被程序再次使用。 本文只讨论垃圾回收算法,对如何判断对象是可被回收的感兴趣请参考可达性分析算法,对垃圾回收器感兴趣的具体收集器请参考垃圾回收器。1、标记-清除算法(Mark-Sweep) ...原创 2019-01-02 22:56:55 · 509 阅读 · 0 评论