首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java底层-GC子系统

在前面HotSpot组成的文章中提到HotSpot是由三大子系统和两大组件组成,其中三大子系统中的类加载子系统和执行引擎子系统已经做过介绍,这一篇我们来看最后一个子系统:GC子系统。...在HotSpot虚拟机中,三大子系统核心基本都是为运行时数据区服务,类加载子系统负责将字节码文件加载到运行时数据区, 执行引擎将执行线程中虚拟机栈的栈帧存储的指令集进行执行,而GC子系统(垃圾回收子系统...)的目的是对运行时数据区的数据进行回收, 关于GC的知识,我想大多数Java开发都有所了解,毕竟这是面试中很常见的问题。...下面我们步入正题: 虚拟机为什么需要GC子系统呢?...既然需要GC子系统对堆内存的无用对象进行回收,那么GC子系统又是如何判断一个对象是否有用呢?

49310

Java底层-类加载子系统(二)

在上一篇关于类加载子系统的文章中,我们通过两道面试题简单的对类加载的过程进行了概述,而这一篇文章我们首先来看类加载器,然后再具体来看类加载的每一个阶段 这里首先引用上一篇文章的图: ?...从JVM层面上看类加载器一共分为两类, 一类是启动类加载器(C++实现),一类是其他类加载器(Java实现),但是从开发人员角度看,有如下划分: ?...他们彼此负责的功能如下: Bootstrap ClassLoader:启动类加载器也叫根类加载器,用C++实现,专门用来加载Java的核心API:$JAVA_HOME中jre/lib/rt.jar中所有...看完了Java虚拟机自带的三种类加载器之后,我们可以知道Java虚拟机自带的类加载器加载文件都是有固定的路径,那么如果我们需要要加载的class文件 不在上面三个类加载器的路径范围内,比如网络中的Class...解析 解析阶段简单的来说就是虚拟机将常量池内的符号引用替换为直接引用的过程 初始化 初始化过程,才会真正开始执行类中定义的Java程序代码。

40710
您找到你想要的搜索结果了吗?
是的
没有找到

Java底层-类加载子系统(一)

在前一节文章里我们聊到Java虚拟机的实现HotSpot是由三个子系统和两大组件组成,这篇文章是三个子系统中关于类加载子系统的首篇文章,文章的重点是介绍一下类加载。...初始化的过程中,就会真正意义上的开始执行类中的Java程序,这个执行指的是 初始化类变量和其他资源(所有的类变量赋值动作和静态语句块),所以「static C」 会首先被控制台输出出来,然后开始执行main...2.使用java.lang.reflect包的方法对类进行反射调用时,如果类没有进行过实例化,则需要先触发其初始化。...当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化 4.虚拟机启动时,用户需指定一个要执行的主类,虚拟机会先初始化这个主类 5.当使用JDK 1.7的动态语言支持时候,如果如果一个java.lang.invoke.MethodHandle...通常指的是实例化对象,静态字段或者方法(但是被final修饰、 编译期把结果放入常量池中的静态字段除外)、 情况2使用反射构建对象,情况三是构造器链的原理、情况四我们在上一节已经提及过、 情况5比较复杂一些,由于Java

27420

09_GPIO子系统与Pinctrl子系统的交互

工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git 视频观看 百问网驱动大全 GPIO子系统与...Pinctrl子系统的交互 参考资料: Linux 5.x内核文档 Linux-5.4\Documentation\driver-api Linux-5.4\Documentation\devicetree...使用GPIO前应该设置Pinctrl 假设使用这个虚拟的GPIO Controller的pinA来控制LED: 要使用pinA来控制LED,首先要通过Pinctrl子系统把它设置为GPIO功能,然后才能设置它为输出引脚...100103 GPIO1内部引脚编号为03,假设在GPIO子系统中全局编号为104107 假设我们要使用pin1_1,应该这样做: 根据GPIO1的内部编号1,可以换算为Pinctrl子系统中的编号...GPIO调用Pinctrl的过程 GPIO子系统中的request函数,用来申请某个GPIO引脚, 它会导致Pinctrl子系统中的这2个函数之一被调用:pmxops->gpio_request_enable

79410

类加载子系统

关于Jvm的类加载子系统 # 概述 ? 完整图如下 ? 如果自己想手写一个Java虚拟机的话,主要考虑哪些结构呢?...类加载器 执行引擎 # 类加载器子系统作用 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。...# 类的加载过程 例如下面的一段简单的代码 /** * 类加载子系统 */ public class HelloLoader { public static void main(String...无论类加载器的类型如何划分,在程序中我们最常见的类加载器始终只有3个,如下所示: 这里的四者之间是包含关系,不是上层和下层,也不是子系统的继承关系。...这样可以保证对java核心源代码的保护,这就是沙箱安全机制。

41420

Linux IIO 子系统

Linux 内核为了管理这些日益增多的 ADC 类传感器,特地推出了 IIO 子系统,我们学习如何使用 IIO 子系统来编写 ADC 类传感器驱动。...1、IIO 子系统简介 IIO 全称是 Industrial I/O,翻译过来就是工业 I/O,大家不要看到“工业”两个字就觉得 IIO 是只用于工业领域的。...大家一般在搜索 IIO 子系统的时候,会发现大多数讲的都是 ADC,这是因为 IIO 就是为 ADC 类传感器准备的,当然了 DAC 也是可以的。...1、iio_dev 结构体 IIO 子系统使用结构体 iio_dev 来描述一个具体 IIO 设备,此设备结构体定义在include/linux/iio/iio.h 文件中 2、iio_dev 申请与释放...2、IIO 驱动框架创建 分析 IIO 子系统的时候大家应该看出了,IIO 框架主要用于 ADC 类的传感器,比如陀螺仪、加速度计、磁力计、光强度计等,这些传感器基本都是 IIC 或者 SPI 接口的。

2.1K40

Linux Led 子系统

2、概述 led 子系统驱动框架: 所有 led 共性: 有和用户通信的设备节点 亮和灭 不同点: 有的 led 可能是接在 gpio 管脚上,不同的 led 有不同的 gpio 来控制 有的 led...可能由其他的芯片来控制(节约 cpu 的 pin,或者为了控制 led 的电流等) 可以设置亮度 可以闪烁 所以 Linux led 子系统把所有 led 的共性给实现了,把不同的地方留给驱动工程师去做...led 子系统核心文件: driver/leds/led-class.c driver/leds/led-core.c driver/leds/led-triggers.c include/linux/...led 子系统是一个简单的 Linux 子系统 ,在目录 /sys/class/leds 下展示该子系统设备,每个设备都有自己的属性: brightness:设置 LED 亮度,范围 0 ~ max_brightness...) 维护 LED 子系统的所有 LED 设备,为 LED 设备提供注册操作函数: led_classdev_register() devm_led_classdev_register() 注销操作函数

31630

Windows 10 子系统

我准备搞一下虚拟机,当然不是指 VirtualBox 和 VMware Workstation, 嗯, 是的 win10 自带的子系统。...2、在 控制面板 中 程序和功能 打开 启用或关闭 Windows功能 , 勾选 适用于 Linux 的 Windows 子系统,点击确定,等待系统配置完后重新启动电脑。...当然我感觉最重要的一点不是,真要在 windows 里面去使用子系统。 使用 打开 Windows Terminal 输入 wsl, 或者新建一个 tab 选择 Ubuntu 即可。...windows 把 Linux 置为子系统,这个骚操作简直太 逆天了。 试下bash ,试下 expect ,通畅无阻。 太爽了, 这不就是我想要的吗,都忍不住笑出猪叫了。...有了子系统。一切就不一样了。简直是沙漠上看到了绿洲哇。 说实在的,现在 window 越来越好用了,装上固态盘速度也快如飞了。就是没有节操的UI丑了点。

2.5K30

JVM之类加载子系统

类加载子系统概述 一、图示 ? 二、作用 类加载子系统负责从文件系统或者网络中加载Class文件(Class文件在开头有特定标识)。...符号应用的字面量形式明确定义在《java虚拟机规范》的class文件格式中。...自上而下:引导类加载器 扩展类加载器 应用程序类加载器 加载器区别 加载器 加载的内容 备注 启动类加载器 java的核心库 处于安全考虑,BootStrap启动类加载器只加载包名为java、javax...的已经被加载过的类,返回结果为java.lang.Class类的实例 defineClass(String name,byte[] b,int off,int len) 把字节数组b中的内容转换为一个Java...Class.forName(com.dsh.jvm.xxx) 初始化一个类的子类 java虚拟机启动时被标明为启动类的类 JDK 7 开始提供的动态语言支持: java.lang.invoke.MethodHandle

36820
领券