自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Danny_idea的博客

不积跬步,无以至千里;不积小流,无以成江海。

  • 博客(212)
  • 收藏
  • 关注

原创 SpringBoot中的bootstrap配置文件和application配置文件的区别

如果希望在Spring容器中使用@Value注解去注入一些中的属性,这一点是做不到的。例如我的bootstap.yml中中定义了属性,然后希望通过来注入该值,其实是无法识别的。因为@Value的注解只支持从配置文件中读取属性。

2023-04-15 23:42:38 546 1

原创 万字长文,彻底搞懂分布式缓存Redis

Linux的io模型Redis的底层原理,数据结构,内存管理Redis的线程模型,持久化策略,Redis的几种架构模式,主从,哨兵,集群Redis的持久化策略,AOF和RDB

2022-12-18 22:14:42 1119

原创 知识体系整理 -- Java的IO

Java领域的io模块是一个非常庞大的知识体系,在大家求职面试的过程中通常也是被问到比较多的一个模块,今天我特意整理了一份关于IO知识体系相关的干货和大家分享,希望各位读者们喜欢。如何理解io流io可以理解为是input 和 output的两个缩写,分别代表了数据的**”输入“和”输出“**。io流则是描述了将数据从内存和数据源之间拷贝的一个过程。输入:数据从数据源加载到内存。输出:数据从内存写回到数据源。这里我所说的数据源是一个比较泛的名称,它可以是指 txt,图片,SQL,mp4等格式的文件。

2022-04-09 15:45:18 658 1

原创 关于数据源方面的一些思考

最近在进展一项技术优化工作,主要是将各个微服务系统内部的数据源连接进行收拢,例如A服务专门访问A数据库,B服务专门访问B数据库,如果出现了B服务内部查询A数据库信息的操作,必须将该类操作聪B服务中迁移至A服务中,这样保证对应的服务专门处理对应的数据库,达到数据源统一管理的好处。数据库连接的底层细节数据源连接的过程中其实是有一定的资源开销和成本在其中的。常见一条数据库的连接过程中需要创建TCP连接,完成三次握手。【这里面就需要涉及到传输的源ip,源端口,目标ip,目标端口】完成握手之后,需要对传输过来的

2022-03-25 08:14:22 385

原创 消息队列系列(二)关于RocketMQ的内部构造设计剖析

分析RocketMQ内部的Broker设计下边我们来着重分析下Broker节点内部的存储设计思路。当消息投递到Broker节点内部之后,如果让我们来进行消息存储的设计,你会如何构思呢,下边给出一些我个人的思考:Version1 单一队列存放模式所有的消息都存放在一个统一的队列中,并且该队列的内部存储形式是以文件持久化的方式写在IO中。这块实际应用到代码层面的设计可以大概如下:class MsgInfo{ byte[] data; int msgSize; MsgInf.

2022-03-09 20:05:51 935

原创 消息队列系列(一)关于RocketMQ双主架构的设计思考

大家好,我是Idea!最近在整理一些关于消息队列相关的知识点,所以开启了现在这个篇目。本篇主要从RocketMQ的整体设计进行入手分析,不会有太过多源码层面的讲解,尽量通过一些图文的方式来带大家深入理解RocketMQ内部的一些设计细节。ps:关于如何使用RocketMQ发送和消费消息的部分这里就直接略过了,这些比较基础的入门级别内容大家可以直接到RocketMQ的官网上去学习了解。下边是对应的官网地址:https://rocketmq.apache.org/docs/motivation/如

2022-03-09 19:58:47 475

原创 八股文面经之Mybatis笔记

最近出去面试,在简历中写了些关于Mybatis的技术点,于是面试官就开始对我不断询问,本文特意记录下面试中遇到的一些问题。说说什么是MybatisMybatis是一款对于Sql进行了一定封装的持久化sql框架,将常用的crud接口进行了一定的封装,减轻了开发人员对于SQL操作的繁琐性。在工作中为什么会选择使用这款框架?简化了sql的相关操作复杂度自动处理好了链接的创建,释放,sql的参数组装可以引入一些第三方缓存的插件提供了对于Spring容器的集成功能学习成本低,市面上也有比较多的资料信

2022-02-13 22:19:34 1694 2

原创 基于Redis6.0 部署迷你版本消息队列实战

技术研究背景由于目前的研发团队处于公司初创阶段,尚未有能成熟的运维体系,对于市面上常见的成熟MQ搭建维护能力不足,但是又希望能有一款轻量级的消息系统供研发团队的成员使用,因此开展了对该方面相关的技术调研工作。通过相关的技术调研后,决定挑选基于Redis实现消息系统。具体技术选型原因:团队内部已经有搭建相关的Redis服务,并且具备一定的运维能力,可以节省技术成本业界有较多关于Redis搭建消息系统方面的技术文章目前的系统的整体吞吐量并不高,接入消息系统的主要目的只是为了实现系统之间的解耦

2022-02-13 22:19:02 279

原创 微服务系列--深入理解RPC底层原理与设计实践

在微服务系统当中,各个服务之间进行远程调用的时候需要考虑各种各样的场景,例如以下几种异常情况:超时调用失败重试服务下线通知服务上线通知服务分组请求队列等等…国内也有一些有先见之明的技术专家们对于这些技术有了较早的认知,因此很早便开始了关于远程服务调用中间件的开发。慢慢地,一些国内大厂自研的RPC调用框架开始变做了一款产品向市面上去进行推广。今年年初的时候,我花了大概一个半月的业余时间自己打磨了一套RPC框架,通过实践尝试后发现,要想真正地落地一款给公司内部使用的

2022-01-06 23:34:32 1283

原创 基于minikube搭建的SpringBoot实战

现在比较多的互联网公司都在尝试将微服务迁到云上,这样的能够通过一些成熟的云容器管理平台更为方便地管理微服务集群,从而提高微服务的稳定性,同时也能较好地提升团队开发效率。但是迁云存在一定的技术难点,今天这篇文章主要介绍如何从0开始搭建一套基于K8s部署的SpringBoot案例教程。基础环境准备:mac操作系统SpringBoot的简单Web工程minikube的环境搭建安装一个适合我们初级入门的k8s环境,比较好的推荐是使用minikube工具,同时使用该工具可以更好地降低我们对k8s的学习门

2021-11-08 07:52:59 2465

原创 微服务系列--聊聊微服务治理中的一些感悟

今年的大多数技术工作基本都是在围绕着技术功能开发进行,关于微服务治理相关部分从事了较多的研究,今晚想做个自己过去一段时间中遇到过的微服务治理问题做一些总结。微服务的调用链路思考自己所在的公司采用的微服务远程调用技术主要是基于Dubbo这款RPC开源框架,所以大部分的项目结构都基本是consumer,provider,interface这样的三个模块。然后早期在做微服务治理的时候,需要观测不同的微服务之间的调用了链路分析,于是就需要深入到各个微服务内部去研究。微服务的调用链路通常都会呈现如下图所示:

2021-10-23 14:39:12 293

原创 线程池的经典应用场景

在日常的开发工作中,我们经常会需要使用到线程池这类型的组件。例如下边几种应用场景:线程池经典应用场景异步发送邮件通知发送一个任务,然后注入到线程池中异步发送。心跳请求任务创建一个任务,然后定时发送请求到线程池中。类似的场景有很多,我们下边一步一步地来介绍不同的应用场景下,线程池的具体使用案例:异步发送邮件场景定义一个简单的邮件发送接口:public interface SendEmailService { /** * 发送邮件 * * @param e

2021-10-19 10:11:07 11320 4

原创 如何落地一款重试组件

背景介绍在实际的项目应用场景中,经常会需要遇到远程服务接口的调用,时不时会出现一些接口调用超时,或者函数执行失败需要重试的情况,例如下边的这种场景:某些不太稳定的接口,需要依赖于第三方的远程调用,例如数据加载,数据上传相关的类型。方案整理基于try catch机制这种方式来做重试处理的话,会比较简单粗暴。public void test(){ try{ //执行远程调用方法 doRef(); }catch(Exception e){

2021-10-09 19:12:50 226 1

原创 聊聊Spring内部的依赖管理

今天主要和大家分享一些在工作中可能会用到的Spring依赖注入,依赖查找方面的技术点整理。Spring依赖查找专题单一类型查找常见用法如下所示:Object getBean(String name) throws BeansException;<T> T getBean(Class<T> requiredType) throws BeansException;<T> T getBean(String name, Class<T> require

2021-09-27 22:58:00 213

原创 一起聊聊设计原则

今晚我们一起来聊聊关于设计原则相关的知识点。​SOLID五大原则是什么SRP 单一责任原则单一责任原则,从名字上我们就能比较好的去理解它。这项原则主张一个对象只专注于单个方面的逻辑,强调了职责的专一性。举个例子:学生管理系统中,我们需要提交一些学生的基本资料,那么学生信息相关的程序都交给了StudentService负责,如果我们要实现一个保存教师基本资料的功能就应该新建一个TeacherService去处理,而不应该写在StudentService当中。OCP开放封闭原则这项原则从我个人的

2021-09-08 12:25:16 285

原创 大话Redis系列--深入探讨多路复用(上)

今天让我们一起来探讨一下多路复用在redis中的具体实现原理。Redis客户端和服务端的连接访问介绍之前的文章中我们有稍微提到过,Redis的客户端和服务端之间是通过resp协议进行链接通信的。这种通信的本质其实是借助了socket套接字进行网络连接。如下图所示:当客户端的jedis和redis服务器进行连接的时候,首先需要在对应操作系统的内核中建立连接,接着才会将对应的链接分配到指定的redis服务端程序当中。假设redis采用了默认的6379端口,那么对应的链接请求就会发送到对应的进程上。如何

2021-09-01 10:08:22 289

原创 计算机原理探险系列(九)CPU调度机制

前边有一篇文章中我有提及到过关于操作系统内部的上下文切换部分,以及一些进程和线程的设计模型。今天这篇文章将会从CPU如何分配资源给到不同的进程使用的角度出发。为什么会有CPU调度当我们的进程或者线程发生切换的时候需要将当前的上下文信息保存到pcb或者tcb中,同时读取下一个进程/线程的上下文。而此时cpu需要从就绪队列中挑选一个合适的进程/线程作为cpu将要运行的下一个单位。那么如何合理地选择下一个执行目标则成为了一个衡量cpu调度是否高效的关键。我们清楚一个进程的状态是存在开启,就绪,执行中,

2021-08-08 19:58:21 677

原创 计算机原理探险系列(十)信号量和管程的一些理解

在os的内部,不同的进程之间其实还是会有互相交互的实时运作,这些实时运作的调度会影响系统内部某些资源数据的共享问题。什么场景下os的执行会有数据共享问题例如a进程访问了x001这块内存区域做了些许修改,然后cpu分片给了b进程继续执行,接下来b进程也对这块内存区域做了修改,这会导致一些共享的内存区域中的数据发生变化。不好确保接下来的a进程继续访问内存区域的时候不受影响。即然并行有这么多风险,为什么还要使用并行计算这种模式呢并行计算的优势在于:共享资源多个不同的任务共用相同的内存资源,可以减少

2021-08-08 19:47:44 324

原创 大话Redis系列--实战案例总结(下)

关于Redis的介绍Redis是一种为了解决高并发,高可用,高拓展,大数据等系列问题的数据库解决方案,同时也是一种可以支持内存以及持久化的日志型key-value数据库。NOSQL,这是一种非关系型数据库,全面叫做Not only sql。Redis数据库的原理设计Redis内部默认提供了16个数据库,在redis-conf里面可以进行选取。如果在使用Redis过程中需要进行数据库切换的话可以通过select 命令去执行操作。图片: https://uploader.shimo.im/f/gQQ4

2021-07-05 22:53:43 316 1

原创 大话Redis系列--实战案例总结(上)

在工作中总会有遇到过使用Redis的场景,除了最简单的JWT案例之外,Redis还有很多丰富的应用落地案例,这个周末特意整理了一批经典的Redis使用案例。电商购物车模型电商网站中的购物车就是一个经典的可以使用Redis来进行实现的案例,(这里我只是说可以使用,不排除有些电商平台的购物车是用其他分布式缓存组件实现的)。这里我截取了某东的购物车界面:其实可以发现,这里的很多操作细节正好可以借助Redis的map结构来进行实现。添加商品hset cart:1001 10088 1增加数量hi

2021-07-04 23:23:08 531

原创 深入挖掘Spring系列 -- Spring内部的事件机制

相信在使用Spring框架的过程中,很多小伙伴都发现内部提供了一种叫做事件的机制,今天的文章主要重点给各位读者系统地介绍关于事件的部分知识点。其实事件并非是Spring官方专门创造出来的,在早期的JDK中就已经有事件设计的影子了。JDK内部提供的事件机理package org.idea.spring.framework.event;import java.util.EventListener;import java.util.EventObject;import java.util.Obse

2021-06-04 22:41:54 365 3

原创 深入挖掘Spring系列 -- 从设计模式角度看Spring

Spring的生态演进变化Spring是一款伟大的框架产品,在发展过程中一直都是靠一家叫做Pivotal的技术公司在背后支撑。Spring真正流行的时间是在2007年11月份,发布了2.5版本的时候。Spring Source 在3.0升级为了后续的发展所以拆分为了Spring Framework4.0 发布于2013年,随后Spring Boot发布于2014年,和传统的Spring Framework有所不同,SpringBoot是一款完全独立的产品路线,很多设计都是在为了简化对于Spring.

2021-06-04 22:19:23 332 1

原创 计算机原理探险系列(八)继续探索,进程和线程

前段时间整理了一整个系列关于计算机原理相关的内容点,感觉还是蛮有意思的。后边歇了一段时间,现在继续回顾这个专题,希望后续自己能够继续坚持维护下去。之前的文章中有提及过什么是进程,既可以说进程是程序运行的一个表现,也可以说它是CPU分配虚拟内存空间的一个基本单元。之前还提及过如果在操作系统中频繁地做进程之间的切换,其实是一个非常消耗资源的行为。因为不同进程之间的数据保存在不同的PCB中,当切换到新的进程的时候,需要将原先进程的PCB数据保存,然后重新加载新的PCB中的数据。进程在执行的时候,CPU的一些

2021-06-04 22:03:40 171 1

原创 深入挖掘Spring系列 -- 实现一个简易版本的aop

在正式进行aop模块的介绍之前,我们需要先弄懂一些基本的术语概念。在软件业,AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP可以用于解决什么问题?代

2021-05-09 20:18:53 180

原创 深入挖掘Spring系列 -- 依赖的来源

前言上一篇文章里面我们着重介绍了关于Spring容器内部的依赖注入。介绍了Spring内部的依赖注入方式:手动注入自动注入针对这两种模式的注入又细分了下其中的途径,具体为:手动模式注入的方法XML模式注入,Java注解方式注入,API方式代码注入。自动注入的方式通过xml配置中的Autowiring 项,自动帮我们绑定注入。手动注入在实际工作中使用的方式有:setter注入,构造器注入,字段注入,方法注入,回调注入 这么几种渠道。同时也介绍了一些特殊数据结构,例如枚举,集合,资源文件的依赖

2021-05-05 11:24:42 250

原创 深入挖掘Spring系列 -- 依赖注入专题

在上一篇的文章中,我们着重讲解了Spring内部的依赖查找这玩意,这一次着重介绍关于spring的依赖注入模块。关于依赖注入这块,本篇重点介绍实战方面的内容,实战案例的代码有些多,希望在分享结束后能对各位读者对Spring的依赖注入有个更加清晰的认识。依赖注入的模式我们通常在使用Spring的时候主要是用注解或者xml的方式进行注入,如果做过基于Spring容器的二次开发的朋友应该还清楚直接基于Spring的API方式进行依赖注入。依赖注入的模式主要可以分为两个大类别:手动模式的注入自动模

2021-05-05 11:08:10 189

原创 深入挖掘Spring系列 -- 依赖查找背后的细节

依赖查找是什么使用过Spring框架的同学应该都清楚,Spring会将我们所需要使用到的Bean按照一定规则存储到一个应用上下文中(ApplicationContext)。所谓的依赖查找就是根据规则从Spring容器中获取对应的Bean。流程有点类似于下图:客户端程序希望获取一个BeanA,那么就向Spring中发起一个请求,从容器中获取对应的BeanA。其实在Spring发明之前,jdk内部也有类似依赖查找的这种功能。下边我们来看看这几个类的属性。java.beans.beancontex.

2021-05-05 10:49:04 447

原创 计算机原理探险系列(二)-- 网络传输

各位亲爱的读者们大家好,在上一篇文章中我们着重对计算机底层对cpu原理进行了相关分析,那么这篇文章中我们主要会对计算机模块对网络进行一次深入挖掘。什么是TCP简单来说就是一种面向连接的稳定,可靠的协议。实战理解先从一段实战操作来看连接:nc指令的安装:(可以用于建立连接)yum install -y nc从一台linux服务器上发起一次和百度的连接: nc www.baidu.com 80然后新起一个会话窗口,查看连接的详情:这里面你会看到nc指令正在和百度建立连接,这就是一次t

2021-05-05 10:31:43 488

原创 计算机原理探险系列(六)-- 看图认识内存分配

之前的几篇文章里面,我们相应介绍了计算机内部的进程,磁盘,cpu,网络等相关知识点,今天主要来一起探讨下关于计算机的内存分配问题。有限的物理内存计算机在运行的时候,其所拥有的内存空间其实是有限的。在早期的Dos操作系统中,通常就是4mb的内存,那时候的应用软件还不怎么流行,基本4mb的内存空间就足够程序运作了。不过到了后期阶段,随着各种硬件设备的不断完善,往往可能会存在内存空间小于程序的大小。(例如:内存空间4mb,程序大小16mb)解决思路设计一个虚拟存储器,将需要用到指定程序加载到内存中进行计算

2021-05-05 10:17:10 2946 8

原创 计算机原理探险系列(五)-- 磁盘存储探秘OS中的进程

什么是进程以下几种说法我感觉都是正确的理解:1.进程是一个动态执行的过程,是CPU分配虚拟内存空间的基本单位。2.进程包含了程序,是程序执行的一种表现,二者之间呈现多对多的一种关系。进程包含了什么包含的内容非常丰富:1.执行的程序代码2.程序代码运行时候产生的临时变量3.指令执行的地址信息4.系统资源信息,例如正在打开的文件简单一句话就是进程包含了一个程序在运行时候所需要的所有资源信息。程序和进程的关系程序是进程的一个基础,计算机执行的所有功能都是基于进程为单位进行的,但是进程内部真

2021-04-23 19:01:28 212

原创 计算机原理探险系列(四)-- 磁盘存储探秘

各位读者朋友们大家好,今天我们一起来聊聊关于计算机底层磁盘的读取原理。磁盘的基本布局磁盘的基本结构主要包含有以下几点,磁盘盘片,读写磁盘的指针,传动轴,主轴等。每次用户程序从用户态发送一条指令给到操作系统内核,进行io读取数据的时候,cpu的ring3级别内核便会通过io总线发送一个指令给到读写磁头,然后由读写磁头定位到盘片的指定位置进行数据读写。最后再通过io总线将数据返回给到用户态的程序中。下边是一张磁盘盘面的大致结构图:在磁盘的盘面上通常会布有许多层的磁道,可以理解为图中的同心圆,然后每

2021-04-23 18:55:53 383

原创 计算机原理探险系列(三)-- TCP数据传输

上一篇文章中我们讲到了关于网络传输数据方面到内容,今天我们来深入了解下网络传输数据过程中可能会存在到问题。数据包正常到一次网络请求中,都会以数据包作为传输单位来判断。如果数据包到体积过大,那么就需要进行拆解。tcp数据包信息基本结构如下:包含了网络数据到发送端口,目标端口,ack,seq,还有一些和滑动窗口相关的数据信息。mss值mss值是一个缩写,全称是max segment size,主要是控制每次数据传输中的最大传输大小。每次进行数据包传输的时候,如果数据包大小超过了tcp里面限制的ms

2021-03-27 17:42:56 302

原创 JVM系列 -- G1与低延迟垃圾收集器

在上一篇文章中我在文中花了较多的部分介绍CMS垃圾收集器,这款收集器的主要特点就是“并发收集+低停顿”。随着JDK7版本的出现,Hotspot JDK研发团队开始渐渐将重心移向到Grarbage First(G1)收集器中,起初设计的目标是希望能够将其替换掉CMS垃圾收集器。垃圾收集器接口的统一收拢JDK在开发的过程中也是有经过很多次代码优化的,在open jdk的这份文章记录中就有提及过关于垃圾收集器的接口统一设计思路:链接地址:https://openjdk.java.net/jeps/3.

2021-03-27 17:25:07 541

原创 计算机原理探险系列(二)-- 网络传输

​各位亲爱的读者们大家好,在上一篇文章中我们着重对计算机底层对cpu原理进行了相关分析,那么这篇文章中我们主要会对计算机模块对网络进行一次深入挖掘。什么是TCP简单来说就是一种面向连接的稳定,可靠的协议。实战理解先从一段实战操作来看连接:nc指令的安装:(可以用于建立连接)yum install -y nc从一台linux服务器上发起一次和百度的连接: nc www.baidu.com 80然后新起一个会话窗口,查看连接的详情:这里面你会看到nc指令正在和百度建.

2021-03-21 15:56:23 437

原创 计算机原理探险系列(一)CPU

cpu制作短视频链接:https://www.bilibili.com/video/BV1tr4y1K7Bs?from=search&seid=12992058713602054171CPU的制作过程晶圆切片如果问及CPU的原料是什么,大家都会轻而易举的给出答案—是硅。这是不假,但硅又来自哪里呢?其实就是那些最不起眼的沙子。不过不是随便抓一把沙子就可以做原料的,一定要精挑细选,从中提取出最最纯净的硅原料才行。为了能够保证硅原料在后续加工的步骤中能够成型,所以人们会将硅原料放入一个石英容器

2021-03-12 14:29:22 818

原创 JVM系列 -- 深入剖析垃圾收集器

前边的一篇文章中我们讲解了Hotspot中垃圾收集的常用算法,标记删除,标记复制,标记整理这三种主要的管理思路。如果说算法只是一种理论模型,那么垃圾收集器就是这种理论模型的实践产物了。本文主要讨论的垃圾收集器是基于JDK1.8版本的Hotspot虚拟机下的实践。在Hotspot虚拟机中,其实出现了很多具有代表性特色的垃圾收集器产品。在实际工作中,通常会在系统中针对不同的年龄代使用不同的垃圾收集器组合搭配,因此对它们有一个系统的认识愈加重要。并行垃圾收集和并发垃圾收集的区别并行垃圾收集首先解释一下什

2021-02-07 23:12:04 247

原创 JVM系列--内存回收

​在前边的文章中我们介绍了Java的虚拟机是如何进行内存管理的,以及一个对象的内存分配过程。今天这篇文章将会介绍下关于jvm里面的垃圾回收过程相关细节点。如何判断一个对象是否存活简单来讲,判断一个对象是否存活的算法主要有以下两类:引用计数算法根可达算法引用计数算法根据一个引用计数器来计算对象被引用的次数,如果引用加一,则计数器+1,反之计数器-1。这个算法虽然实现思路比较简单,但是默认的jvm并不使用这种算法,因为无法解决相互引用的问题。根可达算法通过一系列名为“GC Roots”的

2021-02-05 17:08:38 580

原创 JVM系列--对象内存分配技术分析

上一篇文章中我们有说到过关于tlab技术相关的内容点,这期我们就来深入一起了解关于对象内存分配背后的技术原理。什么是TLAB在上一篇文章中我们有提及到对象在JVM中的内存管理,大部分情况下对象的分布都是存储在Java堆中存储的,但是如果从JVM设计的角度来思考,直接分配在一个处于高度竞争环境下的公共内存区域是否合理呢?如下方代码所示:public class AllocObj { public User alloc(int id, String name) { User

2021-02-05 16:58:59 183

原创 JVM系列--虚拟机的内存管理

Java语言和其他语言在内存管理的区别对比其他语言,例如C语言,在内存管理方面,Java要做得更加“智能”一些。主要是因为Java语言提供了相关的虚拟机进行内存管理。通常在C语言里面,创建一个对象之后需要手动进行对象内存的delete,free处理。例如这段代码:#include <iostream>​using namespace std;int main() { cout << "free begin " << endl; void* p

2021-02-05 16:34:42 174

原创 JVM系列--趣谈Java历史发展的故事

java技术体系的一些发展故事你好我是idea。本专栏我们来一起聊聊关于java虚拟机家族发展的故事内容,本文可能不会讲解过多关于技术原理相关的内容,更多的相关知识点会比较有趣味些。在1990年的时候,有几个技术宅开始在研究一种能够支持跨平台的系统。为什么C语言不具备有较好的跨平台特性?使用C语言编辑出来的文件最终是二进制格式的,但是不同的cpu对于这些二进制识别的规则不一致,这就容易导致C语言写出来的东西在A-cpu上边可以运行,但是在B-cpu中不能运行,所以说C语言在跨平台方面做的不够完善。

2021-01-10 23:30:09 406

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除