CLR的简单理解

        CLR加载程序生成进程,一个进程中可以存在多个线程,当创建一个线程时,会分配1Mb的空间,也就是线程的栈空间,对应jvm的虚拟机堆栈,是线程执行过程中用到的工作内存。这片内存用于方法传递实参,并存储方法内部定义的局部变量,栈是从高位地址向低位地址构建。栈是由操作系统直接管理,不受GC控制,当执行的方法退出后,栈中的存储会自动释放。栈的效率很高,但存储空间有限。

        对象的数据存储在堆上,堆上的数据是所有线程共享的,堆根据类型又分为:GC堆、加载堆(Loader Heap)、大对象(LOH)堆。当对象实例大小小于85000字节时,该对象会被分配到GC堆上,GC回收主要是回收这一片区域,回收过后会进行压缩。当对象实例大小大于85000个字节时,会被分配到LOH堆,只有GC进行完全回收时这片区域的数据才会被回收,且回收后不会压缩。

        加载堆(Loader Heap)用来存储类型的元数据,也就是类的Type信息,反射的时候就是用到这里面的信息。每个类在加载堆中对应一个方法表(Method Table),里面记录该类的元数据信息,比如基类型、静态字段、继承的接口、所有的方法等。加载堆不受GC控制,不会被回收,其生命周期是从创建(第一次使用)直到AppDomain卸载。

        当我们在程序中new一个对象时,会根据这个对象的大小(字段数据等)在GC堆中生成这个对象的内存空间,其中字段数据直接在这个对象空间中,同时这个对象会包含两个引用:TypeHandle和SyncBlockIndex。其中TypeHandle指向加载堆(Loader Heap)中的方法表(Method Table),SyncBlockIndex指针指向Synchronization Block的内存块,用于在多线程环境下对实例对象的同步操作。当这些都准备好以后,会将GC堆中的内存地址返回给栈中该变量,这里也是整个new的过程。

        这里有必要对加载堆(Loader Heap)做下补充,其实在类第一次使用(不一定是new)的时候,类的元数据信息就会被放到加载堆(Loader Heap)中。当真正new一个对象的时候,其实加载堆(Loader Heap)中已经有该类的元数据信息,如果没有,也会先创建。然后再将这个对象的TypeHandle和加载堆中的该类型的MethodTable对应起来。

        以上所有描述,可参考下图:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『软件测试6』bug一两是小事,但安全漏洞是大事!

详解软件测试中的安全测试一、💿安全测试概念1、安全测试概述2、安全测试与软件生命周期的关系3、常规测试与安全测试的不同(1)测试目标不同(2)假设条件不同(3)思考域不同(4&#xf…

我们真的需要JWT吗?

JWT(JSON Web Token)是目前最流行的认证方案之一。博客园、各种技术公众号隔三差五就会推一篇JWT相关的文章,真的多如牛毛。但我对JWT有点困惑,今天写出来跟大家探讨探讨,不要喷哈。JWT原理本文默认读者已经对JWT有所了…

leetcode面试题 02.07. 链表相交

一:题目 二:思路 1.这道题我们是需要找到一个结点,并且从这个结点往后的结点都相等 2.我们需要将两个链表 右对齐 3.然后将长链表的指针移动到和短链表头结点相同的位置 4.接下来就是比较指针,当一个指针相同也就意味着往后的结点的数值也相等 三:上码…

详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务

队列在前端中的应用一、队列是什么二、应用场景三、前端与队列:事件循环与任务队列1、event loop2、JS如何执行3、event loop过程4、 DOM 事件和 event loop5、event loop 总结四、宏任务和微任务1、引例2、宏任务和微任务(1)常用的宏任务和微…

终于弄明白了 Singleton,Transient,Scoped 的作用域是如何实现的

一:背景1. 讲故事前几天有位朋友让我有时间分析一下 aspnetcore 中为什么向 ServiceCollection 中注入的 Class 可以做到 Singleton,Transient,Scoped,挺有意思,这篇就来聊一聊这一话题,自从 core 中有了 S…

leetcode142. 环形链表 II(暴力+双链表)

一:题目 二:思路 1.双指针 快慢指针(快指针一次一个结点,慢指针一次两个结点) 2.如果有环的话,那么快慢指针肯定会相遇 3.那么相遇的地点一定在环中 因为如果没有环的话慢指针是永远追不到快指针的 4.接下来就是判断出口在那里,我们定义一个…

动态 Restful API 生成

介绍通常在DDD开发架构中,我们写完服务层需要在控制器中写API,今天介绍一个组件 Plus.AutoApi 可以用它来动态生成 Restful 风格的 WebApi,不用写 Controller。快速使用在你的应用服务层中添加组件Install-Package Plus.AutoApi在 Startup 中…

卷死了!再不学vue3就没有人要你了!速来围观vue3新特性

一文全面了解vue3新特性一、😶vue3比vue2有什么优势?二、🧐Vue3升级了哪些重要的功能1、createApp2、emits(父子组件间的通信)(1)通信方式(2)举个例子🌰3、多事件处理4、Fragment5、…

idea报错Class not found (在target中没有生成对应的class文件)

一:问题描述 二:解决 既然他不自动生成,那么我们就手动导入; 点击后应用 然后再次运行我们的测试用例;如果不行 再取消勾选 然后再运行我们的测试用例

敲黑板!vue3重点!一文了解Composition API新特性:ref、toRef、toRefs

一文了解Composition API新特性:ref、toRef、toRefs一、🙎如何理解ref、toRef和toRefs1、ref、toRef和toRefs是什么(1)ref1)ref是什么2)举个例子🌰(2)toRef是什么1&#…

C# 枚举转列表

C# 枚举转列表独立观察员 2020 年 9 月 1 日今天有朋友问我,ComboBox 怎么绑定一个 Enum,其实他的意思是枚举如何转换为列表。想想这确实是一个挺正常的需求,但我一时也只想到遍历,他觉得麻烦,于是我在网上帮忙查了一下…

leetcode242. 有效的字母异位词(两种方法map或数组)

一:题目 二:上码 1:方法一&#xff08;map解法&#xff09; class Solution { public:bool isAnagram(string s, string t) {/**思路:1.分析题意&#xff0c;这个是要判断t中的字符出现次数和s中字符出现的次数相同2.可以用map<char,int>来做*/map<char,int>m1,m…

活久见!月薪30k的小程序全栈开发到底有多难?

10年前&#xff0c;公司的标配是门户网站&#xff0c;造就了一批网站工作室。随着移动互联网大潮兴起&#xff0c;App又成了企业标配&#xff0c;IOS和Android开发赚的盆满钵满。然而App导致的手机内存告急&#xff0c;无止尽的信息推送&#xff0c;让微信小程序应运而生。然而…

卷不动也得继续学!紧跟vue3的步伐,再来get一波进阶新特性!

vue3进阶新特性一、&#x1f4d7;watch和watchEffect1、watch和watchEffect的区别2、举个例子&#xff08;1&#xff09;wtach监听&#xff08;2&#xff09;watchEffect监听二、&#x1f4d8;setup如何获取组件实例&#xff08;1&#xff09;为什么需要获取组件实例&#xff0…

leetcode349. 两个数组的交集(思路+详解)

一:题目 二:上码 class Solution { public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {/**思路:本题我们采用的哈希表数据结构是unordered_set,没有用数组因为我们不确定给出的数组中数值的范围如果 强上会出现空间的大量…

高效掌握新技能的「树型思维」

大家好&#xff0c;我是Z哥。不知道你有没有过这样的困惑&#xff0c;想学习某项新技能&#xff0c;但是很容失败。比如&#xff0c;出于职业发展的考虑&#xff0c;想学习一门新的编程语言&#xff0c;或者想了解一个新的技术框架&#xff1b;又或者看了某些综艺节目后想玩一玩…

vue2的响应式原理学“废”了吗?继续观摩vue3响应式原理Proxy

一文了解Vue3的响应式原理一、&#x1f7e9;回顾Object.defineProperty二、&#x1f7e8;Proxy基本使用三、&#x1f7e6;学习Proxy语法&#xff1a;Reflect四、&#x1f7e7;Vue3如何用Proxy实现响应式1、实现响应式2、Proxy总结&#xff08;1&#xff09;深度监听&#xff0c…

一名“企业定制化人才”的自诉:“我不愿意,但却无可奈何”

这是头哥侃码的第214篇原创几个月前&#xff0c;我曾在大智慧时期的一位同事跟我聊微信&#xff0c;说自己所在的公司这两年业务一直不温不火&#xff0c;而且从19年底就逐渐缩减技术人员。今年上半年又因为疫情的关系&#xff0c;公司干脆直接砍掉了剩余的三个技术部门&#x…

一文了解分而治之和动态规则算法在前端中的应用

一文了解分而治之和动态规则算法一、分而治之1、分而治之是什么&#xff1f;2、应用场景3、场景剖析&#xff1a;归并排序和快速排序二、动态规则1、动态规则是什么&#xff1f;2、应用场景3、场景剖析&#xff1a;斐波那契数列4、动态规则VS分而治之三、分而治之算法常见应用1…

leetcode1. 两数之和(两种方法)

一:题目 二:上码 1:方法一 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> v;for(int i 0; i < nums.size() - 1; i) {for(int j i1; j < nums.size(); j) {if(nums[i] nums[j] target) {v.push_…