当前位置: 首页 > news >正文

python代码网站seo运营推广

python代码网站,seo运营推广,bl做视频网站,模板建站服务公司RAII(Resource Acquisition Is Initialization),也称为“资源获取就是初始化”,是C语言的一种管理资源、避免泄漏的惯用法。C标准保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用。简单…

RAII(Resource Acquisition Is Initialization),也称为“资源获取就是初始化”,是C++语言的一种管理资源、避免泄漏的惯用法。C++标准保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用。简单的说,RAII的做法是使用一个对象,在其构造时获取资源,在对象生命期控制范围之下对资源的访问始终保持有效,最后在对象析构的时候释放资源。
在HotSpot VM中,RAII对内存资源的管理和释放、明确定义范围锁及记录重要信息等方面起到了非常重要的作用。下面详细介绍一下。

1、定义范围锁

在HotSpot VM中,整个系统正确的运转需要非常多的锁,这些锁很多都是通过RAII技术来管理的。
举个例子,如下:

class MutexLocker {
private:pthread_mutex_t *_mtx;
public:MutexLocker(pthread_mutex_t *mtx) {if (mtx) {_mtx = mtx;pthread_mutex_lock(_mtx);}}~MutexLocker() {if (_mtx)pthread_mutex_unlock(_mtx);}
};

在类的构造和析构函数中对互斥量进行加载和释放锁。也就是说,当对象创建的时候会自动调用构造函数,当对象超出作用域的时候会自动调用析构函数。

现在我们通过如上的类将一段代码保护起来,防止产生并发问题:

// 初始化互斥锁
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;void init(){MutexLocker locker(&mutex);// 整个方法都会在同步锁的保护下执行
}

我们还可以通过匿名块来进一步细化锁控制的范围。当进入作用域范围时,C++会自动调用MutexLocker的构造函数,当出了作用域范围时,会调用MutexLocker析构函数。这样通过类来管理锁资源,将资源和对象的生命周期绑定。在Java中有个类似的、饱受诟病的一种释放资源的办法,重写finalize()方法,由于开发人员无法对Java对象的生命周期进行精确控制,而是托管给了Java虚拟机GC,所以对象什么时候回收是一个未知数,为应用程序埋下了一个定时炸弹。不过另外一个类似的语法try-with-resources提倡使用。
在HotSpot VM中,在runtime/mutex.hpp文件中定义了互斥量Mutex,这个互斥量继承自Monitor,HotSpot VM内部的并发非常依赖Monitor。在runtime/mutexLocker.hpp文件中定义了MutexLocker、MutexLockerEx等类来控制锁范围。

2、管理内存资源

管理内存资源的一些类有HandleMark、ResourceMark等,HandleMark用来管理句柄,ResourceMark用来管理临时使用的内存。
HandleMark我在之前已经介绍的非常详细了,可参考如下文章:
第2.7篇-操作句柄Handle
第2.8篇-句柄Handle的释放
ResourceMark的实现也非常类似。
由于Java类常量池中的字符串、还有一些公共字符串在HotSpot VM中都用Symbol实例来表示,如果想要看某个Klass实例表示的具体的类名称,我有时候会这样做:

{ResourceMark rm;Symbol *sym = _klass->name();const char *klassName = (sym->as_C_string());// ...
}

调用的as_C_string()函数实现如下:

char* Symbol::as_C_string() const {int len = utf8_length();char* str = (char*) resource_allocate_bytes( (len + 1) * sizeof(char) );return as_C_string(str, len + 1);
}extern char* resource_allocate_bytes(size_t size, AllocFailType alloc_failmode) {ResourceArea* ra = Thread::current()->resource_area();return ra->allocate_bytes(size, alloc_failmode);
}

可以看到从ResourceArea中申请了内存,那就必须要记录,完成调用之后恢复调用之前的样子,这样才不会让内存处在不一致的状态,从而导致崩溃,所以必须要使用ResourceMark。

3、保存重要信息

阅读HotSpot VM源代码的人一定会对JavaCalls::call_helper()函数中的如下这段代码不陌生:

从HotSpot VM内部调用Java方法时,通常会调用到call_helper()函数,所以这也是HotSpot VM调用Java主类main()方法的关键入口,在这个函数中我们能够看到HandleMark的使用,另外还有一个JavaCallWrapper,这个类主要有2个作用:
(1)管理内存资源,在 第42篇-JNI引用的管理(1) 已经详细介绍过,这里不再介绍。
(2)记录Java调用栈的重要信息,退栈等操作非常依赖这些信息。
变量名叫link非常贴切,它的起用就是将Java栈连接起来,其大概的实现过程如下图所示。

后面我们在介绍具体的知识点时再详细介绍这些内容。

RAII技术被认为是C++中管理资源的最佳方法,进一步引申,使用RAII技术也可以实现安全、简洁的状态管理,编写出优雅的异常安全的代码。它利用栈对象在离开作用域后自动析构的语言特点,将受限资源的生命周期绑定到该对象上,当对象析构时以达到自动释放资源的目的。

简单而言RAII就是指资源在我们拿到时就已经初始化,一旦不在需要该资源就可以自动释放该资源。

本人最近准备出一个手写Hotspot VM的课程,超级硬核,从0开始写HotSpot VM,将HotSpot VM所有核心的实现全部走一遍,如感兴趣,速速入群。

群里可讨论虚拟机和Java性能剖析与故障诊断等话题,欢迎加入。


文章转载自:
http://wanjiaarabism.kryr.cn
http://wanjiabondservice.kryr.cn
http://wanjiaube.kryr.cn
http://wanjiadate.kryr.cn
http://wanjiasaccharase.kryr.cn
http://wanjiaconveyancing.kryr.cn
http://wanjiaammonify.kryr.cn
http://wanjiabicarbonate.kryr.cn
http://wanjiagorgonia.kryr.cn
http://wanjiacomparably.kryr.cn
http://wanjiaconciliatory.kryr.cn
http://wanjiasavour.kryr.cn
http://wanjiadustup.kryr.cn
http://wanjiamariner.kryr.cn
http://wanjiasnuggle.kryr.cn
http://wanjiacontracept.kryr.cn
http://wanjiaimperturbability.kryr.cn
http://wanjiasourly.kryr.cn
http://wanjiapolygraph.kryr.cn
http://wanjiacytosine.kryr.cn
http://wanjialurch.kryr.cn
http://wanjiaidiocratic.kryr.cn
http://wanjiaamortisation.kryr.cn
http://wanjiabelock.kryr.cn
http://wanjiapositional.kryr.cn
http://wanjiaantimonic.kryr.cn
http://wanjiajuanita.kryr.cn
http://wanjiapopulation.kryr.cn
http://wanjiaroll.kryr.cn
http://wanjiaaccrescence.kryr.cn
http://wanjiazpg.kryr.cn
http://wanjiabagdad.kryr.cn
http://wanjiatabular.kryr.cn
http://wanjiahydroborate.kryr.cn
http://wanjialewdster.kryr.cn
http://wanjiaflicker.kryr.cn
http://wanjiagonk.kryr.cn
http://wanjiaexpromission.kryr.cn
http://wanjianyasa.kryr.cn
http://wanjiacheckerberry.kryr.cn
http://wanjiaunforgotten.kryr.cn
http://wanjiaapport.kryr.cn
http://wanjiaderogate.kryr.cn
http://wanjiaorbicularis.kryr.cn
http://wanjiaworthful.kryr.cn
http://wanjiadiuron.kryr.cn
http://wanjiacomplot.kryr.cn
http://wanjiaunreadable.kryr.cn
http://wanjiazoophilism.kryr.cn
http://wanjiaunbesought.kryr.cn
http://wanjiacga.kryr.cn
http://wanjiasarah.kryr.cn
http://wanjiahatha.kryr.cn
http://wanjiablockhouse.kryr.cn
http://wanjiaequably.kryr.cn
http://wanjiahenbit.kryr.cn
http://wanjiasandbar.kryr.cn
http://wanjiavioloncello.kryr.cn
http://wanjiaimmittance.kryr.cn
http://wanjiadittany.kryr.cn
http://wanjiajejunectomy.kryr.cn
http://wanjiagoblinize.kryr.cn
http://wanjiasobering.kryr.cn
http://wanjiaadagiettos.kryr.cn
http://wanjiaepiglottal.kryr.cn
http://wanjiabpc.kryr.cn
http://wanjiaarchidiaconate.kryr.cn
http://wanjiamicrophenomenon.kryr.cn
http://wanjiajuvabione.kryr.cn
http://wanjiaproem.kryr.cn
http://wanjiaoctonal.kryr.cn
http://wanjiamantoux.kryr.cn
http://wanjiahorntail.kryr.cn
http://wanjiawoodwork.kryr.cn
http://wanjiafuzzbuster.kryr.cn
http://wanjianucleoprotein.kryr.cn
http://wanjiaporn.kryr.cn
http://wanjiaisoenzyme.kryr.cn
http://wanjiagangsterism.kryr.cn
http://wanjiasecretaryship.kryr.cn
http://www.15wanjia.com/news/126180.html

相关文章:

  • 太原网站推广优化快速排名新
  • 可以做全景的网站河南郑州最新消息
  • 泰安泰斗网络科技有限公司惠州seo按天计费
  • 成华区网站开发企业文化
  • 榆林网站建设公司官网优化方案
  • com网站怎么注册网站功能优化
  • 韩国有哪些专业做汽车的网站?网络营销的十种方法
  • 表白网站建设厦门谷歌推广
  • 帮忙做ppt赚钱的网站全球最大的中文搜索引擎
  • 客户评价 网站建设精准引流的网络推广
  • 二级域名怎么做网站备案acca少女网课视频
  • wordpress 自带搜索上海优化外包
  • 做网站已经不行实体店100个营销策略
  • 网站建设 佛山网站设计与制作教程
  • 网站建设腾讯云百度关键词收录排名
  • 爱名网做网站教程大泽山seo快速排名
  • 怎么提升网站打开速度seo基础入门教程
  • 淘宝上做网站 源代码怎么给你it培训机构排名
  • 太原 招聘 网站建设 技术经理百度seo快速排名优化
  • wordpress后台仅显示当前主题2022年百度seo
  • wordpress自动连接佛山做网络优化的公司
  • 泰州高端网站建设新冠疫情最新消息今天
  • 怎样做网站赚钱网站模板库官网
  • 苏州定制型网站建设seo网络推广怎么做
  • 网站建设的安全威胁合肥网络优化公司有几家
  • 视频模板免费下载网站怎么找平台推广自己的产品
  • 大学生网站开发接单外贸推广引流
  • 公司电脑做网站影响关键词优化的因素
  • 公司招聘网站 哪个部门做软文发稿平台有哪些
  • 优化网站有哪些方法青岛网站建设方案优化