JVM虚拟机
岿然如故
这个作者很懒,什么都没留下…
展开
-
虚拟机字节码执行引擎
虚拟机字节码执行引擎栈帧概述栈帧也叫过程活动记录,是编译器用来进行方法调用和方法执行的一种数据结构,它是虚拟机运行时数据区域中的虚拟机栈的栈元素。栈帧中包括了局部变量表,操作数栈,动态链接和方法返回地址以及额外的一些附加信息,在编译过程中,局部变量表的大小已经确定,操作数栈深度也已经确定,因此栈帧在运行的过程中需要分配多大的内存是固定的,不受运行时影响。对于没有逃逸的对象也会在栈上分配内存,对象的大小其实在运行时也是确定的,因此即使出现了栈上内存分配,也不会导致栈帧改变大小。一个线程中,可能调用原创 2020-12-31 23:33:44 · 101 阅读 · 1 评论 -
类加载器
类加载器双亲委派模型双亲委派模型工作过程先问下这个类在当前加载器中有没有被加载,有就返回(直接引用),没有就往上抛。如果到根加载器都没有加载过该类,那么根加载器尝试加载,如果成功就返回,失败就让低一级的加载器加载,直到成功为止。如果连最初发起类加载请求的类加载器也无法完成加载请求时,将会抛出ClassNotFoundException,而不再调用其子类加载器去进行类加载。双亲委派模型优点java类随着它的类加载器一起具备了一种带优先级的层次关系,越是基础的类,越是被上层的类加载器进行加载原创 2020-12-31 23:27:28 · 72 阅读 · 1 评论 -
类加载
类加载类加载机制概述虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。懒加载机制:用的时候就打开,不用就不打开。 第一次使用需要等待时间,但节省系统资源。加载开始后,连接开始;加载结束后,连接才可以结束类加载过程加载通过一个类的全限定名来获取定义此类的二进制流将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中生成一个代表这个类的Class对象,作为这个类的各种数据的访问原创 2020-12-31 23:24:24 · 61 阅读 · 0 评论 -
JVM字节码指令
JVM字节码指令字节码指令简介Java虚拟机的指令由一个字节长度的,代表着某种特定操作含义的数字,称之为操作码,以及跟随其后的零至多个代表此操作所需参数的操作数而构成。操作码的长度为1个字节,因此最大只有256条基于栈的指令集架构基于栈指令0:iconst_1;1:iconst_1;2:iadd;3:ireturn;字节码与数据类型在虚拟机的指令集中,大多数的指令都包含了其操作所对应的数据类型信息。iload 将局部变量量表中int类型数据加载到操作数栈中大多原创 2020-12-31 23:11:41 · 230 阅读 · 0 评论 -
class文件
class文件8位字节为基础单位的二进制流。当遇到8位字节以上的空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。Class文件中有两种数据类型,分别是无符号数和表。 (基本数据类型与引用数据类型)节省存储空间,提高系统性能魔数:开头4个字节package com.jvm.bytecode.java01;public class MyTest { private int a = 1; public int getA() { return原创 2020-12-31 22:58:57 · 278 阅读 · 0 评论 -
虚拟机工具
jpsjava process statusC:\Users\auas>jps14548 //本地虚拟机唯一ID8840 JpsC:\Users\auas>jps -m //运行时传入主类的参数C:\Users\auas>jps -V //虚拟机参数C:\Users\auas>jps -L //运行的主类全名或jar包名jstat监控 类装载,内存,垃圾收集,jit编译的信息C:\Users\auas>jps原创 2020-12-31 22:32:40 · 167 阅读 · 0 评论 -
内存分配策略
内存分配策略优先分配到eden大多数情况下,对象在新生代 Eden 区中分配。当 Eden 区没有足够空间进行分配时,虚拟机将发起一次 Minor GC 。Minor GC(新生代 GC):指发生在新生代的垃圾收集动作,因为 Java 对象大多都具备朝生夕灭的特性,所以 Minor GC 发生的非常频繁,一般回收速度也比较快。Major GC(老年代 GC):指发生在老年代的 GC,出现了 Major GC ,经常会伴随至少一次的 Minor GC(不绝对)。Major GC 的速度一原创 2020-12-31 22:23:14 · 129 阅读 · 0 评论 -
垃圾回收
如何判定对象为垃圾对象引用计数法 – 一般不采用在对象中添加一个引用计算器,被引用一次计数器值就加 1;当引用失效时,计数器值就减 1;计数器为 0 时,对象就是不可能再被使用的,简单高效,缺点是无法解决对象之间相互循环引用的问题。-XX:+PrintGCDetails --查看垃圾回收器package MyDemo.work;public class Main { private Object instance; public Main() { byt原创 2020-12-31 22:08:06 · 71 阅读 · 0 评论 -
java对象
对象创建new 类名根据new 的参数在常量池中定位一个类的符号引用如果没有找到这个符号引用,说明类还没有被加载,则进行类的加载,解析和初始化。虚拟机为对象分配内存(位于堆中)将分配的内存初始化为零值(不包括对象头)调用对象的 方法。对象分配内存内存分配 --》java堆是否规整 决定–》垃圾回收策略决定(是否有压缩整理功能–有规则:已使用与未使用空间)指针碰撞(内存分配规整)用过的内存放一边,没用过的内存放一边,中间用一个指针分隔;分配内存的过程就是将原创 2020-12-31 21:45:17 · 87 阅读 · 0 评论 -
虚拟机内存区域
虚拟机内存区域程序计数器当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器的值来确定下一条要执行的字节码指令的位置执行 Java 方法和 native 方法时的区别:执行 Java 方法时:记录虚拟机正在执行的字节码指令地址;执行 native 方法时:无定义(Undefined);是 5 个区域中唯一不会出现 OOM (内存溢出)的区域。例如:多线程,有两个线程,其中一个线程可以暂停使用,让其他线程运行,然后等自己获得cpu资源时,又能从暂停的原创 2020-12-31 21:37:28 · 78 阅读 · 0 评论