加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

程序设计的5个底层逻辑,决定你能走多快

发布时间:2019-11-29 18:51:47 所属栏目:Unix 来源:站长网
导读:副标题#e# 肉眼看计算机是由CPU、内存、显示器这些硬件设备组成,但大部分人从事的是软件开发工作。计算机底层原理就是连通硬件和软件的桥梁,理解计算机底层原理才能在程序设计这条路上越走越快,越走越轻松。从操作系统层面去理解高级编程语言的执行过程

下面我们贴一段 rocketmq 消息存储模块的代码,位于 MappedFile 类中,这个类是 rocketMq 消息存储的核心类感兴趣的可以自行研究,下面两个方法一个是创建文件映射,一个是预热文件,每预热 1000 个数据页,就让出 CPU 权限。

private void init(final String fileName, final int fileSize) throws IOException { 

        this.fileName = fileName; 

        this.fileSize = fileSize; 

        this.file = new File(fileName); 

        this.fileFromOffset = Long.parseLong(this.file.getName()); 

        boolean ok = false; 

 

        ensureDirOK(this.file.getParent()); 

 

        try { 

            this.fileChannel = new RandomAccessFile(this.file, "rw").getChannel(); 

            this.mappedByteBuffer = this.fileChannel.map(MapMode.READ_WRITE, 0, fileSize); 

            TOTAL_MAPPED_VIRTUAL_MEMORY.addAndGet(fileSize); 

            TOTAL_MAPPED_FILES.incrementAndGet(); 

            ok = true; 

        } catch (FileNotFoundException e) { 

            log.error("create file channel " + this.fileName + " Failed. ", e); 

            throw e; 

        } catch (IOException e) { 

            log.error("map file " + this.fileName + " Failed. ", e); 

            throw e; 

        } finally { 

            if (!ok && this.fileChannel != null) { 

                this.fileChannel.close(); 

            } 

        } 

    } 

JVM 中对象的内存布局

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读