JVM 模块
JVM深入Java虚拟机知识
神韵499
记录、创造与成就感也许是我写博客的一个原因。当然,转载也是我对知识存储的渴望,我对别人的知识点的赞同,这也是一个原因。但是,每天早上起来在自己博客里回味、每天早上在博客海洋里进步,每天在过去的知识里又学到了新的知识,有了新的认识。这才是我写博客最大的原因
展开
-
内置锁探索,结合对象头分析内置锁(亲测,研究一段时间总结)
Table of Contents一、对象头打印信息类二、对象头介绍三、对象头的参数说明四、无锁分析四、偏向锁五、轻量级锁六、重量级锁七、带上一张自画图--内置锁sync升级过程图阅读此博客前必读:代码大家自己动手敲,不要太懒哈。我都给截图,不给代码!此篇博客大多都是基于实战验证理论过程,重点在于偏向级锁实战等几个实战。一、对象头打印信息类导入Maven...原创 2019-10-24 23:16:32 · 893 阅读 · 13 评论 -
JVM--dump与log文件生成及查看
目录写好的一个类,无限向容器中添加对象,造成oom堆溢出JVM运行参数设置及说明oom.info.dump分析oom_gcinfo.log写好的一个类,无限向容器中添加对象,造成oom堆溢出package aa;import java.util.ArrayList;import java.util.List;public class Test2 { publi...原创 2019-09-28 09:33:40 · 2569 阅读 · 1 评论 -
JVM基本指令及其说明
转自:JVM基本指令本文分为3个部分,第一个部分列出常用的jvm指令,每一个指令基本都有几个类似的指令,看名字就知道了,比如像iconst、lconst、fconst、dconst这些主要是针对不同的类型(int、long、float、double),将对应类型的值push到栈顶,其他指令类似,所以基本指令就给出一个例子,其他的联想一个就好,第二部分,给出一小段代码,并给出指令集并详细给出每一...转载 2019-08-17 19:05:11 · 179 阅读 · 0 评论 -
JVM--内存模型
目录JVM内存模型一览JVM内存模型分为五个部分JVM模型五个部分作用JVM内存模型一览JVM内存模型分为五个部分线程共享区域:方法区、堆(重点研究区域) 线程不共享区域:虚拟机栈、本地方法栈、程序计数器JVM模型五个部分作用1、方法区储存运行时的常量池储存类加载后的类信息、final定义的常量、static定义静态变量和即时编译器编译的数...原创 2019-08-13 10:52:08 · 158 阅读 · 0 评论 -
吃透String的intern方法
三种常量池1、常量池版本变化:jdk1.6及以前,运行时常量池在方法区中 jdk1.7,运行时常量池移到堆中去了 jdk1.8,运行时常量池移到元空间中,取消了方法区(永久代)2、下面是jdk1.8的三种常量池类文件中的常量池:存在class文件中,所处区域堆中,内容概要符号引用和字面量,class常量池是在编译的时候每个class都有的,在编译阶段,存放的是常量的符号引用。...原创 2019-06-05 19:12:40 · 413 阅读 · 0 评论 -
JVM--对象创建过程
转自:Java创建对象过程Java创建对象的过程简单记录一下Java创建对象的过程,就是new一个对象的时候发生了哪些事情。Java程序执行的过程在此不作说明,对象的创建过程只是程序执行过程的一部分。有关整个程序执行的过程,等熟悉了虚拟机之后在作说明。对象创建过程简述Java中对象的创建就是在堆上分配内存空间的过程,此处说的对象创建仅限于new关键字创建的普通Java对象,不...转载 2019-08-16 08:54:08 · 115 阅读 · 0 评论 -
JVM--类加载、生命周期、加载器、双亲委派机制
目录一、类加载机制二、类的生命周期三、类初始化时机四、类加载器五、双亲委派机制一、类加载机制虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制二、类的生命周期主要是加载-连接(验证-准备-解析)-初始化-使用-卸载1、加载主要是通过.class文件通过...原创 2019-08-16 08:30:59 · 196 阅读 · 0 评论 -
JVM--垃圾收集器
垃圾收集器概述垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法、火车算法)的具体实现,不同商家、不同版本的JVM所提供的垃圾收集器可能会有很在差别,本文主要介绍HotSpot虚拟机中的垃圾收集器。并行垃圾收集与并发垃圾收集的区别Minor GC和Full GC的区别新生代垃圾收集器1、Serial收集器Serial(串行...原创 2019-08-15 16:09:53 · 111 阅读 · 0 评论 -
JVM--对象的结构
对象的结构对象由对象头、实例数据、填充数据三部分组成,三个部分内存加起来必须要求是8个倍数个字节1、Header(对象头,默认12个字节)自身运行时数据(Mark Word)包括哈希值、GC分代年龄、是否开启偏向锁、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等等 类型指针(klass) 即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例 数组长度(...原创 2019-08-15 14:45:38 · 635 阅读 · 0 评论 -
JVM--虚拟机栈
虚拟机栈概念目录虚拟机栈概念栈帧代码演示 虚拟机栈是线程独占区域,就是每个线程都拥有自己的虚拟机栈内存 为虚拟机执行Java方法服务,储存运行时的数据信息,由Java代码写的方法 虚拟机栈由栈帧组成,一个方法构成一个栈帧 栈帧由局部变量表、操作数栈、动态链接、返回地址组成,还有一些其它无关的数据 每一个方法从调用开始至执行完成的过程,都...原创 2019-08-15 11:23:17 · 251 阅读 · 0 评论 -
JVM--方法区、永久代、元空间、字符串常量池
方法区方法区是一个规范。存储的运行时的常量池,类加载后的类信息、final定义的常量、静态变量及即时编译器编译后的数据信息等等。永久代永久代(PermGen)是方法区的一个实现(相当于接口于实现类的关系),我们通常说的是HotSpot虚拟机,也就是说,它用来存放运行时的常量池,类加载后的元数据、final定义的常量、静态变量及即时编译器编译后的数据信息等等。jdk1.6及...原创 2019-08-11 10:07:03 · 778 阅读 · 0 评论 -
JVM--垃圾回收过程详解
垃圾回收过程详解新生代采用复制算法老年代采用标记整理算法新生代和老年代内存比较,当然都是可调的新生代Eden:SurvivorFrom:SurvivorTo=8:1:1新生代:老年代=1:2假设开始1、创建了六个对象,对象优先分配到新生代中的Eden区(绿色表示表示继续存活对象,当然大多数都是不可以存活的对象)2、第一次MinorGC,普通GC,Eden与...原创 2019-08-14 18:25:55 · 598 阅读 · 1 评论 -
JVM--对象的分配原则(内存分配策略)
对象优先分配到Eden Space区新创建的对象被分配到Eden Space区,Eden Space区内存不足就会触发MinorGC清理Eden Space内存。这个区域(新生代)的对象都是朝生夕死,是对象最频繁发生的区域。大对象直接进入老年代需要大量连续空间的对象,如:长字符串、大数组等,会直接在老年代分配内存。这是因为,这样可以避免在新生代区频繁的GC时发生大量的内存赋值(新...原创 2019-08-14 17:16:39 · 692 阅读 · 0 评论 -
JVM--对象访问的两种方式
直接指针快,减少了一次寻址的时间,变量引用直接指向实际内存,直接寻址。直接指针保存了一个指针----到对象类型数据的指针。使用句柄Java堆中将会划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息。句柄池,记录了实际内存,变量引用通过句柄池,句柄池在找到实际内存,相当于间接寻址句柄池需要保存了两...原创 2019-08-14 16:35:34 · 286 阅读 · 0 评论 -
JVM--垃圾对象判定与垃圾回收算法
垃圾判定标准 引用计数法,Java不使用 可达性分析算法(根搜索法),Java采用这种方法判断对象是否可回收 两种垃圾判定标准参考博客对象的访问定位两种方式垃圾回收算法/策略1、标记-清除算法jvm会扫描所有的对象实例,通过可达性分析算法,将活跃对象进行标记,jvm再一次扫描所有对象,将未标记的对象进行清除,只有清除动作,不作任何的处理,这样导致的结果会...原创 2019-08-14 16:26:44 · 584 阅读 · 0 评论 -
JVM--堆
Java堆概念 堆是线程共享区域 储存实例对象、类属性变量和数组 垃圾回收主要的区域 OutOfMemoryError异常就是因为堆内存不足抛出的如下代码,可让堆溢出溢出结果这里提一下,内存溢出和内存泄露内存溢出,堆内存不足造成当堆内存有300m时,被占用了100m没有用的对象。这就是内存泄露。如果说此时有一个250m的大对象要分配进来,但...原创 2019-08-14 14:51:06 · 123 阅读 · 0 评论