摘要: JVM(八)方法调用的底层实现 上一章中主要记录的类加载机制和类的加载器的知识,那么这一章的话主要是记录方法调用的一些原理,如果有不对的地方请评论区指出,这块的理论比较多,请耐心看下去。 本次测试所使用的代码,配和 jclasslib 插件使用: package com.test.demo.meth 阅读全文
posted @ 2021-03-13 17:09 某人人莫 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 上一个章节主要学习记录了 class 文件的文件结构以及字节码文件。 那么这一章节主要记录的是类的一个生命周期,研究 class 文件被加载到内存之后做了什么,有那些步骤,其次就是加载类的类加载器,以及其中的双亲委派机制,最后再了解下什么是OSGI。 一、类的生命周期 ​ 一个类被加载到内存之后其实 阅读全文
posted @ 2021-03-13 17:07 某人人莫 阅读(75) 评论(0) 推荐(0) 编辑
摘要: 一、class 文件结构 ​ Java 技术之所以能保持非常好的向后兼容性,这点原因和 Class 文件结构有很大的关系。虽然 Java 到目前位置以及发展了很多的版本了,但是 Class 文件结构的内容在 JDK 1.2 的时代就已经定义好了,即使现在已经经历了很多的版本也只是在原来的基础上新增内 阅读全文
posted @ 2021-03-13 17:00 某人人莫 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 一、三色标记 ​ 在三色标记之前有个算法叫 标记 - 清除 法,这个标记会根据这个对象是否可达(GC Roots)来进行一个标记设置,GC 回收的时候就会根据这个标记进行清除。 ​ 标记 - 清除 法最大的问题就是在清除的-时候需要 STW 这就导致了 GC 的效率就比较低。 ​ 三色标记最大的好处 阅读全文
posted @ 2021-02-07 23:41 某人人莫 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 一、什么是GC ​ GC (Garbage Collection)垃圾回收,顾名思义就是专门回收垃圾的。,在C/C++中,我们需要用到内存的时候,需要先手动申明一下,使用完后又需要在手动回收一下,这两部非常麻烦而且还经常会出这个方面的问题。而这一切在Java中就已经被自动执行掉了,所以我们写代码的时 阅读全文
posted @ 2021-02-02 13:18 某人人莫 阅读(1137) 评论(0) 推荐(0) 编辑
摘要: 一、对象创建过程 检查加载 ​ 检查类是否以及被加载(是否存在对应类型的class)。 分配内存 内存划分方式 指针碰撞 ​ 如果堆中的内存是绝对规整的,那么就会按照对象的大小直接进行内存的划分,此情况称为指针碰撞。 空闲列表 ​ 如果堆中的内存是碎片化的、不规整的,那么JVM就不能进行指针碰撞,J 阅读全文
posted @ 2021-01-30 15:30 某人人莫 阅读(187) 评论(0) 推荐(0) 编辑
摘要: JHSDB 是一款基于服务性代理实现的进程外调试工具。服务性代理是HotSpot 虚拟机中一组用于映射Java 虚拟机运行信息的,主要基于Java 语言实现的API 集合。 一、打开JHSDB ​ ​ 打开JDK所在目录(一般默认装在c盘),保证在JDK的bin目录下也存在sawindbg.dll, 阅读全文
posted @ 2021-01-28 14:33 某人人莫 阅读(2360) 评论(0) 推荐(0) 编辑
摘要: 一、内存处理流程 申请内存 ​ 通过配置参数或者默认的参数向操作系统申请内存,根据内存的大小找到内存段的起始地址和结束地址分配给JVM,由JVM进行内部分配。 初始化运行数据区 ​ 根据参数进行堆、方法区、栈的分配。 类加载(后面的文章会详解) ​ 将class、常量、静态属性放到方法区,对象放在堆 阅读全文
posted @ 2021-01-27 22:17 某人人莫 阅读(140) 评论(0) 推荐(0) 编辑
摘要: JVM 全称Java Virtual Machine,也就是我们耳熟能详的Java 虚拟机。它能识别.class 后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。 Java执行流程 ​ 当我们编写完程序之后文件就是.Java文件通过Javac指令编译之后就是.clas 阅读全文
posted @ 2021-01-24 17:58 某人人莫 阅读(208) 评论(0) 推荐(0) 编辑