![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM学习
小李小李彬彬有礼
记录自己学习的一点一滴
展开
-
跟叶子猿学习JVM(二)Java虚拟机内存管理
程序计数器可以看作当前线程执行的字节码的行号指示器,且每个线程都有自己独立的程序计数器。此区域没有规定内存溢出的情况,因为我们开发人员不会操作到此区域。 虚拟机栈(先进后出)为虚拟机执行Java方法服务,存放栈帧(每个栈帧对应一个方法)。 每个方法执行都会创建栈帧,栈帧中包含局部变量表、返回值地址等信息。栈帧创建好,方法开始执行,待方法执行完毕,栈帧出栈,随后就会被销毁。举例:若A...原创 2019-03-20 17:37:36 · 321 阅读 · 0 评论 -
JVM内存分区、垃圾回收算法、垃圾回收器的整理记忆
JVM的内存主要分两大区域:线程独享区和线程共享区。线程独享区还可以细化三块,那就是程序计数器、虚拟机栈和本地方法栈。程序计数器其实就是存放我们当前线程所执行到的字节码的位置的一个标识,这各区域我们开发人员不会操作到,所以这个区域也没有内存溢出之类的情况。虚拟机栈就是为虚拟机中的java方法服务的,存放栈帧信息。栈帧信息中包含局部变量表和返回值地址等信息。每个方法在执行的时候都会创建栈帧,在方法执...原创 2019-07-12 11:40:47 · 281 阅读 · 0 评论 -
跟叶子猿学习JVM(六)垃圾回收机制(三)——垃圾回收算法(标记-清除,复制,标记-整理,分代收集)
Java 垃圾回收机制常用的垃圾回收算法 1.标记-清除算法(用于堆内存中新生代的垃圾回收算法) 将可达性分析算法所标记的可回收对象进行回收,这个算法在空间和效率都存在问题,因为经过垃圾回收后,内存中会出现很多空闲的但是不连续的空间,当我们要分配一个大对象的时候,可能会出连续的空间不足的情况,导致空间不足。那么这时虚拟机还会执行一次垃圾回收,导致效...原创 2019-03-28 17:10:25 · 351 阅读 · 0 评论 -
跟叶子猿学习JVM(八)——内存分配
内存分配 内存分配策略 优先分配到Eden区 大对象直接分配到老年代 长期存活的对象分配到老年代 空间分配担保(新生代向老年代借内存) 动态对象年龄判断 优先分配到Eden区 通过代码验证,首先我们先设置各分区内存大小(测试...原创 2019-04-01 18:27:28 · 268 阅读 · 0 评论 -
跟叶子猿学习JVM(五)垃圾回收机制(二)——可达性分析算法
可达性分析法 可达性分析算法能够弥补上篇文章中描述的引用计数算法的缺点,它的思路是通过一系列的“GC Roots”对象作为起点进行搜索,搜索走过的路径称为“引用链”,如果一个对象和GC Roots之间没有可达的路径,则称该对象是不可达的,需要注意的是被标记为不可达对象之后不会立刻被判定为可回收对象,而是至少有两次被标记为不可达对象后,才会被判定为可回收对象。 如上图,通过GC Roots可...原创 2019-03-27 14:52:13 · 297 阅读 · 0 评论 -
跟叶子猿学习JVM(四)垃圾回收机制(一)——引用计数算法
垃圾回收比较核心的几个问题是 1.如何判定对象为垃圾对象? 可使用算法:引用计数法、可达性分析法 2.如何回收? 回收策略:标记-清除算法、复制算法、标记-整理算法、分代收集算法 垃圾回收器:Serial、Parnew、Cms、G1 3.什么时候回收? 本文学习引用计数算法 引用计数算法 在A对象(在堆内存中)中添加一个引用计数器,当内存中有地方引用这个A对象的时候,引用计...原创 2019-03-27 13:42:13 · 352 阅读 · 0 评论 -
跟叶子猿学习JVM(七)垃圾回收机制(四)——垃圾收集器(serial,serial old,parnew,parallel,parallel old,cms,G1)
垃圾收集器 JDK8默认使用的垃圾回收器是:Parallel Scavenge(新生代) + Serial Old(老年代) 新生代(Serial,ParNew,Parallel) 1.Serial收集器(适用于客户端,即桌面应用)【使用复制算法】 最基本,发展最悠久,单线程垃圾回收,用于新生代的内存...原创 2019-03-29 16:33:34 · 744 阅读 · 0 评论 -
跟叶子猿学习JVM(三)对象的创建、对象内存分配、对象的访问
1、对象的创建 New 类名 → 根据new的参数在常量池中定位一个类的符号引用 → 如果当前常量池中没有这个符号引用,说明这个类还没有被加载,则进行类的加载,解析和初始化 → 虚拟机为对象在堆中分配内存 → 将分配的内存初始化(不包括对象头) → 调用对象的<init>方法(构造方法等) 2、对象的内存分配 给对象分配内存可以通过指针碰撞、空闲列表的方式,但是这两种方式...原创 2019-03-22 18:18:10 · 228 阅读 · 0 评论 -
跟叶子猿学习JVM(一)杂七杂八的基本了解
JDK,JRE,JVM关系 Jdk是java开发工具包 Jre是java运行时环境 Jvm是java虚拟机 详细如下图 内存浅了解 设置堆内存溢出的时候自动导出堆快照信息参数 -XX:+HeapDumpOnOutO...原创 2019-03-20 17:49:30 · 395 阅读 · 0 评论 -
Java类的加载过程、加载时机、加载器、加载机制
加载过程 一个Java文件从编码完成到最终执行可以分为两个阶段,分别为编译、运行。编译就是把我们写好的java文件通过javac编译成.class文件。运行就是把.class文件交给JVM执行。类加载的过程其实就是把JVM把.class中的信息加载到内存中,并解析生成对应的class对象的过程。 类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是前面所有程序运行的基础,JVM提...原创 2019-08-21 18:20:33 · 199 阅读 · 0 评论