【Java-Jvm虚拟机】
文章平均质量分 92
【JVM-Java虚拟机】
我一直在流浪
这个作者很懒,什么都没留下…
展开
-
JVM - 你们垃圾回收器用的什么? G1有哪些特点?G1如何实现可预测的停顿时间?漏标问题如何解决的?介绍下三色标记?说说STAB 算法 ?
内存溢出outofmemory,是指程序在申请内存时,没有足够的内存空间供其使用,出现outofmemory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。内存泄露memoryleak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。memoryleak会最终会导致outofmemory!https并行指多件事情在同一时刻发生;比如A事情和B事情同时进行;......原创 2022-07-26 11:46:56 · 1124 阅读 · 0 评论 -
JVM - 如何理解 Java、Jdk、Jre、Jvm ?
Java Virtual Machine(Java虚拟机),是虚拟出来的一个“操作系统”,在这个“操作系统”里面运行java程序的class字节码文件;JVM启动之后,在我们的电脑上或者服务器上表现出来的就是一个java进程,这个进程里面运行的是我们的Java程序;这个JVM本身是C语言开发的,并且不同的电脑操作系统是不同的版本,比如针对windows有windows的jvm,针对Linux有Linux的jvm;问题思考:为什么说 java 是跨平台(Linux系统,Windows系统,Mac系统)的语原创 2022-06-14 23:02:58 · 422 阅读 · 0 评论 -
郑雨迪 | 深入拆解Java虚拟机 - Java代码是怎么运行的?
1. 为什么 Java 要在虚拟机里运行?Java 作为一门高级程序语言,它的语法非常复杂,抽象程度也很高。因此,直接在硬件上 运行这种复杂的程序并不现实。所以呢,在运行 Java 程序之前,我们需要对其进行一番转换。这个转换具体是怎么操作的呢?当前的主流思路是这样子的,设计一个面向 Java 语言特性 的虚拟机,并通过编译器将 Java 程序转换成该虚拟机所能识别的指令序列,也称 Java 字节码。这里顺便说一句,之所以这么取名,是因为 Java 字节码指令的操作码(opcode) 被固定为一个字节。原创 2022-05-30 13:03:37 · 458 阅读 · 0 评论 -
一网打尽:类的初始化过程
我想关于类的初始化,一定有很多人有困惑的地方,想谈一次对类的初始化流程的理解。文章目录1. 类的初始化时机1.1:通过子类引用父类的静态变量,不会导致子类初始化1.2:通过数组定义来引用类不会触发此类的初始化1.3:常量在编译阶段会存入调用类的常量池中,本质上没有直接引用到定义常量的类,因此不会触发定义常量的类的初始化2. 初始化代码块介绍2.1 构造代码块2.1.1 构造代码块优先于构造函数执...原创 2019-12-16 17:35:04 · 439 阅读 · 0 评论 -
Windows系统如何逐步查看CPU占用过高的线程?
在windows下只能查看进程的cpu占用率,要查看线程的cpu占用率要借助其他的工具,我这里用的是微软提供的 Process Explorer v15.3下载地址http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx下载后解压运行即可:1、查看进程的CPU的占用率:2、进程内线程的CPU占用率:3、把CPU占用过高的...原创 2020-03-25 13:32:42 · 4644 阅读 · 1 评论 -
javap命令的使用
1.javap的基本用法:javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码。通过它,我们可以对照源代码和字节码,从而了解很多编译器内部的工作。2.语法: javap [ 命令选项 ] class. . . javap 命令用于解析类文件。其输出取决于所用的选项。 若没有使用选项,javap 将输出传递给它的类的 public 域及方法。javap 将其输出...原创 2019-12-24 20:31:52 · 960 阅读 · 0 评论 -
华为机试练习_16:购物单(有依赖的背包问题)
1、题目描述2、思路分析1、本题属于依赖背包问题:有四种情况:只取主件:f[i-1,j-a[i,0]]+a[i,0]*b[i,0]取主件+附件1:f[i-1,j-a[i,0]-a[i,1]]+a[i,0]*b[i,0]+a[i,1]*b[i,1]取主件+附件2:f[i-1,j-a[i,0]-a[i,2]]+a[i,0]*b[i,0]+a[i,2]*b[i,2]既主件+附件1+...原创 2020-04-10 14:53:59 · 1438 阅读 · 3 评论 -
JVM:类加载器
文章目录一、类加载阶段1. 加载2. 连接1、验证2、准备3、解析3. 初始化二、类加载器1. 启动类加载器2. 扩展类加载器3. 双亲委派模型4. 线程上下文类加载器5. 自定义类加载器一、类加载阶段1. 加载将类的字节码载入方法区中,内部采用 C++ 的 instanceKlass 描述 java 类,它的重要 field 有:_java_mirror 即 java 的类镜,例如对 ...原创 2020-03-28 18:00:48 · 274 阅读 · 1 评论 -
JVM:字节码指令
文章目录字节码指令1. 入门2. 图解方法执行流程1、原始的java代码2、编译后的字节码文件3、常量池载入运行时常量池4、方法字节码载入方法区5、main 线程开始运行,分配栈帧内存6、执行引擎开始执行字节码3. 字节码角度分析 a++4. 条件判断指令5. 循环控制指令6. 练习----判断结果7. 构造方法原理1、 <cinit>()V2、 <init>()V8. 方...原创 2020-03-28 14:49:46 · 348 阅读 · 0 评论 -
JVM:类文件结构
文章目录一、类文件结构1. 魔数2. 版本3. 常量池一、类文件结构一个简单的 HelloWorld.java// 二进制字节码(类基本信息,常量池,类方法定义,包含了虚拟机指令)public class HelloWorld { public static void main(String[] args) { System.out.println("hello ...原创 2020-03-27 17:55:10 · 281 阅读 · 0 评论 -
JVM:垃圾回收器
文章目录1、垃圾回收器1. 串行2. 吞吐量优先3. 响应时间优先4. G1垃圾回收器(Garbage First)4.1 G1垃圾回收阶段1、垃圾回收器串行单线程堆内存较小,适合个人电脑吞吐量优先多线程堆内存较大,多核 cpu单位时间内,STW 的时间最短 0.2 0.2 = 0.4,垃圾回收时间占比最低,吞吐量高响应时间优先多线程堆内存较大,多核 cpu尽可能让单次...原创 2020-03-27 11:34:57 · 385 阅读 · 0 评论 -
JVM:垃圾回收算法
文章目录1、如何判断对象可以回收?1. 引用计数法2. 可达性分析算法3. 五种引用3.1 软引用3.2 弱引用2、垃圾回收算法1. 标记-清除算法2. 标记-整理算法3. 标记-复制算法4. 结论3、分代垃圾回收1. 新生代与老年代2. 分代垃圾回收的工作原理3. GC相关参数3.1 小对象晋升到老年代3.2 大对象直接晋升到老年代1、如何判断对象可以回收?在堆里面存放着Java世界中几乎所...原创 2020-03-26 15:45:44 · 302 阅读 · 0 评论 -
JVM:JVM内存结构
文章目录一、JVM内存结构1. 程序计数器2. 虚拟机栈2.1 定义2.2 栈内存溢出2.3 线程运行诊断3. 本地方法栈4. 虚拟机堆4.1 定义4.2 堆内存溢出4.3 堆内存诊断5. 方法区一、JVM内存结构程序计数器虚拟机栈本地方法栈堆方法1. 程序计数器Program Counter Register 程序计数器(寄存器)作用,是记住下一条jvm指令的执行地址...原创 2020-03-25 15:06:54 · 360 阅读 · 0 评论 -
【jvm学习17】垃圾收集算法
文章目录1.标记清除算法2.复制算法3.标记整理算法4.分代算法1.标记清除算法2.复制算法3.标记整理算法4.分代算法原创 2020-01-09 19:21:55 · 163 阅读 · 0 评论 -
【jvm学习16】虚拟机字节码执行引擎
在上个博客中,分析了一整张class文件,但是因为源码中没有涉及到异常,因此没有分析异常表,因此这里重点分析异常表public class MyTest3 { public void test() { try { InputStream is = new FileInputStream("test.txt"); Serve...原创 2020-01-02 21:05:57 · 147 阅读 · 1 评论 -
【jvm学习15】全面分析一个类的class文件(一篇就够了)
文章目录1 magic(魔数) && version(版本)2 constant_pool(常量池)Class文件包含了java虚拟机指令集和符号表以及其他信息。下面我们分析这个类的字节码文件:public class MyTest2 { String str = "Welcome"; private int x=5; public static In...原创 2019-12-31 20:57:09 · 265 阅读 · 1 评论 -
【jvm学习14】字节码结构(方法表,附加属性表)
文章目录12 方法个数13 方法集合13.1 分析第一个方法1 方法访问标志2 方法名索引 & 描述符索引3 属性计数器4 属性集合4.1 属性名称索引4.2 属性长度4.3 属性信息13.2 分析第二个方法13.3 分析第三个方法13.4 分析第四个方法12 方法个数13 方法集合13.1 分析第一个方法字段表下面就是方发表类型名称含义 数量u2acc...原创 2019-12-27 22:10:38 · 443 阅读 · 0 评论 -
【jvm学习13】字节码结构(类访问标志,类索引,父类索引,接口计数器,接口集合,字段计数器,字段集合)
0. java字节码结构类型名称说明长度u4magic魔数,识别Class文件格式4个字节u2minor_version次版本号2个字节u2major_version主版本号2个字节u2constant_pool_count常量池个数2个字节cp_infoconstant_pool常量池表n个字节u2acces...原创 2019-12-27 20:18:36 · 331 阅读 · 0 评论 -
【jvm学习12】字节码结构(魔数,版本信息,常量池数量,常量池表)
文章目录1.魔数2.版本信息3.常量池4.常量池的总体结构5.jvm中的描述符6. 常量池常量结构表public class MyTest1 { private int a=1; public MyTest1() { } public int getA() { return a; } public void setA(int a) ...原创 2019-12-25 20:57:29 · 830 阅读 · 0 评论 -
【jvm学习11】jvm描述符
jvm中的描述符在jvm规范中,每个变量/字段都有描述信息,描述信息主要的作用是描述字段的数据类型,方法的参数列表(包括数量,类型与顺序)与返回值。基本数据类型和代表无返回值的void类型都用一个大写字符来表示,而对象类型用字符L加对象的全限定类名来表示。为了压缩字节码文件的体积,对于基本数据类型,jvm都是用一个大写字母来表示,如下表示:B--byte,C--Char,D--doub...原创 2019-12-25 19:40:30 · 1035 阅读 · 0 评论 -
【jvm学习10】线程上下文类加载器
1.线程上下文类加载器的重要性:父ClassLoader可以使用当前线程的Thread.currentThread().getContextClassLoader()所指定的classLoder加载的类,这就 改变了父ClassLoader不能使用子ClassLoader或者是没有直接父子关系的ClassLoader加载类的情况,即破坏了双亲委托模型。2.为什么会有上下文类加载器?线程上下文...原创 2019-12-24 19:30:35 · 356 阅读 · 0 评论 -
【jvm学习09】类加载的命名空间总结
文章目录1. 类加载器命名空间2. 类加载器双亲委托模型的好处3. 如何比较两个类是否相等1. 类加载器命名空间public class MyPerson { private MyPerson myPerson; public void setMyPerson(Object object) { this.myPerson = (MyPerson) object...原创 2019-12-21 20:49:58 · 153 阅读 · 0 评论 -
【jvm学习08】复杂类中自定义类加载器
文章目录例1例2例3例1public class MyCat { public MyCat(){ System.out.println("MyCat is loaded by:"+getClass().getClassLoader()); }}public class MySample { public MySample(){ Sy...原创 2019-12-21 11:35:38 · 150 阅读 · 0 评论 -
【jvm学习07】自定义类加载器
2. 双亲委派机制如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类类加载器中,只有当父类加载器反馈自己无法加载这个请求时(他的搜索范围内没有找到所需要的类),子加载器才会尝试自己去加载。...原创 2019-12-21 09:28:39 · 295 阅读 · 0 评论 -
【jvm学习06】类加载器的分类
文章目录1. 类的加载器分类2. 类加载器相关例题例1 getClassLoader()例2 getSystemClassLoader()例3 类的加载与初始化例4 getSystemClassLoader()例5 各种类加载器例6 数组类的类加载器1. 类的加载器分类根类加载器扩展类加载器系统(应用)类加载器:classpath上指定的类库用户自定义的类加载器2. 类加载器相关例...原创 2019-12-20 13:41:31 · 168 阅读 · 0 评论 -
【jvm学习05】类的加载,类加载器,类的初始化步骤
文章目录1. 类的加载2. 类加载器3. 类的初始化步骤1. 类的加载类的加载的最终产品是位于内存中的class对象class对象封装了类在方法区内的数据结构,并且向java程序员提供了访问方法区内的数据结构的接口。类加载器并不需要等到某个类被首次主动使用时再加载它JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文件缺失或者存在错误,...原创 2019-12-15 21:40:22 · 242 阅读 · 1 评论 -
【jvm学习04】类的加载,连接与初始化(例题)
文章目录例题例1:类的初始化例2:类的加载例3:常量值在编译期间不确定例4:常量值在编译期间不确定例5 :类的初始化例6 :数组的创建例7:接口初始化例8:接口初始化例9:类的初始化(very good)例题例1:类的初始化public class MyTest1 { public static void main(String[] args) { System.ou...原创 2019-12-15 20:28:22 · 131 阅读 · 0 评论 -
【jvm学习03】类的加载,连接与初始化
文章目录1. java虚拟机与程序的生命周期2. 类的加载,连接与初始化2.1 类的初始化2.2 类的加载在java代码中,类型的加载,连接与初始化过程都是在程序运行期间完成的。1. java虚拟机与程序的生命周期以下几种情况,java虚拟机将结束生命周期:执行了System.exit()方法程序正常执行结束程序在执行过程中遇到了异常或错误而异常终止由操作系统出现错误而导致java...原创 2019-12-15 20:27:10 · 128 阅读 · 0 评论 -
【jvm学习02】虚拟机栈
文章目录1.栈的数据结构2.栈的相关定义与演示3.问题辨析1.栈的数据结构2.栈的相关定义与演示每个线程运行时所需要的内存,称为虚拟机栈每个栈由多个栈帧组成,对应着每次方法调用时所占用的内存每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法3.问题辨析垃圾回收是否涉及栈内存?不会,因为栈内存就是方法调用产生的栈帧内存,而栈帧内存在方法调用结束后都会被弹出栈,...原创 2019-12-09 21:53:46 · 168 阅读 · 0 评论 -
【jvm学习01】程序计数器
文章目录1. 程序计数器的作用2. 程序计数器的特点程序计数器(寄存器)1. 程序计数器的作用记住下一条JVM指令的执行地址当解释器将指令getstatic解释为机器码时,程序计数器会记住指令astore_1的地址3,当解释器将指令astore_1解释为机器码时,程序计数器会记住aload_1的指令4,…以此类推。总之,记住下一个jvm指令的执行地址。2. 程序计数器的特点1.是线...原创 2019-12-04 21:15:53 · 291 阅读 · 0 评论