简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
Java对象创建底层原理1.虚拟机遇到一条new指令时,首先检查这个对应的类能否在常量池中定位到一个类的符号引用;2.判断这个类是否已经被加载,解析,初始化3.为这个新生对象在java堆中分配内存空间,其中分配内存空间的方式有两种指针碰撞:分配内存空间包括开辟一块内存和移动指针两个步骤;非原子步骤可能出现并发问题,Java虚拟机采用CAS配上失败重试的方式保证更新操...
1.类加载过程类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示:其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持 Java 语言的运行...
简介:JVM中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 java 堆和方法区中,在程序运行期间,这部分内存的分配和使用都是动态的。对象存活判断:引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。此方法简单,无法解决对象...
Spring容器高层视图Spring 启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表,然后根据这张注册表实例化Bean,装配好Bean之间的依赖关系,为上层应用提供准备就绪的运行环境。Bean缓存池:HashMap实现IOC容器介绍Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的...
本文将从多个维度综合对比Kafka、RabbitMQ、RocketMQ、ActiveMQ这4款当前最主流的MQ消息中间件产品,希望能为您的下一次产品的架构设计和MQ消息中间件选型提供参考依据。特点RabbitMQActiveMQKafkaRocketMQ资料文档资料数量多资料数量多资料数量中等资料数量少,建议去官网上看...
RocketMQ 核心组件图RocketMQ是开源的消息中间件,它主要由NameServer,Producer,Broker,Consumer四部分构成。NameServer:NameServer主要负责Topic和路由信息的管理,功能类似Dubbo的zookeeper。Producer:消息生产者,负责产生消息,一般由业务系统负责产生消息。Broker:消息中转角色,负...
定义:用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。角色:中介者模式有如下角色:Mediator中介者定义一个接口用于与各同事(Colleague)对象通信。ConcreteMediator具体中介者通过协调各同事对象实现协作行为,了解并维护它的各个同事。Colleague抽...
CountDownLatch 同步倒数计数器CountDownLatch允许一个或多个线程等待其他线程完成操作。CountDownLatch对象内部存有一个整数作为计数器。调用countDown()方法就将计数器减1,当计数到达0时,则所有等待者会停止等待。计数器的操作是原子性的。常用API构造方法CountDownLatch(int count)构造方法参数指定了计数的次数...