当前位置:网站首页>字节跳动面试分享,看看AQS阻塞队列和条件队列,

字节跳动面试分享,看看AQS阻塞队列和条件队列,

2021-09-15 08:10:35 隔壁的老郭

一、内存与线程

1、内存结构

内存是计算机的重要部件之一,它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。JVM的内存结构规定Java程序在执行时内存的申请、划分、使用、回收的管理策略,通说来说JVM的内存管理指运行时数据区这一大块的管理。

字节跳动面试分享,看看AQS阻塞队列和条件队列,_后端

2、线程运行

JVM中一个应用是可以有多个线程并行执行,线程被一对一映射为服务所在操作系统线程,调度在可用的CPU上执行,启动时会创建一个操作系统线程;当该线程终止时,这个操作系统线程也会被回收。

字节跳动面试分享,看看AQS阻塞队列和条件队列,_Java_02

在虚拟机启动运行时,会创建多个线程,数据区中有的模块是线程共享的,有的是线程私有的:

字节跳动面试分享,看看AQS阻塞队列和条件队列,_程序员_03

线程共享:元数据区、堆Heap;

线程私有:虚拟机栈、本地方法栈、程序计数器;

单个CPU在特定时刻只能执行一个线程,所以多线程通过几块空间的使用,然后不断的争抢CPU的执行时间段。

二、元数据空间

基本描述

方法元空间(方法区)在JVM启动的时候被创建,是被各个线程共享的内存空间,用于存放类和方法的元数据以及常量池,比如Class和Method。

在实际的开发中,经常因为加载的类太多,进而导致内存溢出问题,这样可以对元空间的大小进行扩展。

与堆的关系

字节跳动面试分享,看看AQS阻塞队列和条件队列,_程序员_04

元空间存放加载的类信息,当类被实例化时,堆中存储实例化的对象信息,并且通过对象类型数据的指针找到类。

三、堆空间

基本描述

JVM启动时创建堆区,是内存管理的核心区,通常情况下也是最大的内存空间,是被所有线程共享的,几乎所有的对象实例都要在堆中分配内存,所以这里也是垃圾回收的重点空间。

堆栈关系

字节跳动面试分享,看看AQS阻塞队列和条件队列,_程序员_05

栈是JVM运行时的单位,堆是存储单位,当栈中方法结束,相关对象失去所有引用后,不会马上被移除堆空间,要等到垃圾收集器运行的时候。

Java高频面试专题合集解析:

字节跳动面试分享,看看AQS阻塞队列和条件队列,_Java_06

当然在这还有更多整理总结的Java进阶学习笔记和面试题未展示,其中囊括了Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构资料和完整的Java架构学习进阶导图!

 CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】字节跳动面试分享,看看AQS阻塞队列和条件队列,_程序员_07

更多Java架构进阶资料展示

字节跳动面试分享,看看AQS阻塞队列和条件队列,_Java_08

字节跳动面试分享,看看AQS阻塞队列和条件队列,_程序员_09

字节跳动面试分享,看看AQS阻塞队列和条件队列,_Java_10

版权声明
本文为[隔壁的老郭]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_15302416/3888210

随机推荐