国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

unsafe類

RebeccaZhong / 2673人閱讀

摘要:類提供了硬件級(jí)別的原子操作,主要提供了以下功能通過類可以分配內(nèi)存,可以釋放內(nèi)存。方法獲取對(duì)象中偏移地址對(duì)應(yīng)的型的值數(shù)組元素定位類中有很多以結(jié)尾的常量,比如,等,這些常量值是通過方法得到的??梢越K止一個(gè)掛起的線程,使其恢復(fù)正常。

java不能直接訪問操作系統(tǒng)底層,而是通過本地方法來訪問。Unsafe類提供了硬件級(jí)別的原子操作,主要提供了以下功能:

1、通過Unsafe類可以分配內(nèi)存,可以釋放內(nèi)存。

類中提供的3個(gè)本地方法allocateMemory、reallocateMemory、freeMemory分別用于分配內(nèi)存,擴(kuò)充內(nèi)存和釋放內(nèi)存,與C語言中的3個(gè)方法對(duì)應(yīng)。

2、可以定位對(duì)象某字段的內(nèi)存位置,也可以修改對(duì)象的字段值,即使它是私有的。

字段的定位:JAVA中對(duì)象的字段的定位可能通過staticFieldOffset方法實(shí)現(xiàn),該方法返回給定field的內(nèi)存地址偏移量,這個(gè)值對(duì)于給定的filed是唯一的且是固定不變的。getIntVolatile方法獲取對(duì)象中offset偏移地址對(duì)應(yīng)的整型field的值,支持volatile load語義。getLong方法獲取對(duì)象中offset偏移地址對(duì)應(yīng)的long型field的值

數(shù)組元素定位:Unsafe類中有很多以BASE_OFFSET結(jié)尾的常量,比如ARRAY_INT_BASE_OFFSET,ARRAY_BYTE_BASE_OFFSET等,這些常量值是通過arrayBaseOffset方法得到的。arrayBaseOffset方法是一個(gè)本地方法,可以獲取數(shù)組第一個(gè)元素的偏移地址。Unsafe類中還有很多以INDEX_SCALE結(jié)尾的常量,比如 ARRAY_INT_INDEX_SCALE,ARRAY_BYTE_INDEX_SCALE等,這些常量值是通過arrayIndexScale方法得到的。arrayIndexScale方法也是一個(gè)本地方法,可以獲取數(shù)組的轉(zhuǎn)換因子,也就是數(shù)組中元素的增量地址。將arrayBaseOffset與arrayIndexScale配合使用,可以定位數(shù)組中每個(gè)元素在內(nèi)存中的位置。

3、掛起與恢復(fù)

將一個(gè)線程進(jìn)行掛起是通過park方法實(shí)現(xiàn)的,調(diào)用 park后,線程將一直阻塞直到超時(shí)或者中斷等條件出現(xiàn)。unpark可以終止一個(gè)掛起的線程,使其恢復(fù)正常。整個(gè)并發(fā)框架中對(duì)線程的掛起操作被封裝在 LockSupport類中,LockSupport類中有各種版本pack方法,但最終都調(diào)用了Unsafe.park()方法。

4、CAS操作

是通過compareAndSwapXXX方法實(shí)現(xiàn)的

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67025.html

相關(guān)文章

  • Java多線程進(jìn)階(十二)—— J.U.C之a(chǎn)tomic框架:Unsafe

    摘要:本身不直接支持指針的操作,所以這也是該類命名為的原因之一。中的許多方法,內(nèi)部其實(shí)都是類在操作。 showImg(https://segmentfault.com/img/remote/1460000016012251); 本文首發(fā)于一世流云的專欄:https://segmentfault.com/blog... 一、Unsafe簡介 在正式的開講 juc-atomic框架系列之前,有...

    趙連江 評(píng)論0 收藏0
  • Java魔法——Unsafe應(yīng)用解析

    摘要:典型應(yīng)用鎖和同步器框架的核心類,就是通過調(diào)用和實(shí)現(xiàn)線程的阻塞和喚醒的,而的方法實(shí)際是調(diào)用的方式來實(shí)現(xiàn)。 前言 Unsafe是位于sun.misc包下的一個(gè)類,主要提供一些用于執(zhí)行低級(jí)別、不安全操作的方法,如直接訪問系統(tǒng)內(nèi)存資源、自主管理內(nèi)存資源等,這些方法在提升Java運(yùn)行效率、增強(qiáng)Java語言底層資源操作能力方面起到了很大的作用。但由于Unsafe類使Java語言擁有了類似C語言指針...

    reclay 評(píng)論0 收藏0
  • Java并發(fā)基礎(chǔ):了解無鎖CAS就從源碼分析

    摘要:該類將整數(shù)值與引用關(guān)聯(lián)起來,可用于原子的更數(shù)據(jù)和數(shù)據(jù)的版本號(hào)。 CAS的全稱為Compare And Swap,直譯就是比較交換。是一條CPU的原子指令,其作用是讓CPU先進(jìn)行比較兩個(gè)值是否相等,然后原子地更新某個(gè)位置的值,其實(shí)現(xiàn)方式是基于硬件平臺(tái)的匯編指令,在intel的CPU中,使用的是cmpxchg指令,就是說CAS是靠硬件實(shí)現(xiàn)的,從而在硬件層面提升效率。 CSA 原理 利用CP...

    toddmark 評(píng)論0 收藏0
  • 神奇的Unsafe,你get了嗎

    摘要:它的目的是為了增強(qiáng)語言直接操作底層資源的能力,無疑帶來很多方便。這樣可以有效避免多線程環(huán)境下的同步問題。另外還有的匿名內(nèi)部類的生成,數(shù)組內(nèi)存操作等。 本文原創(chuàng)地址,我的博客:jsbintask的博客(食用效果最佳),轉(zhuǎn)載請注明出處! 簡介 Unsafe是jdk提供的一個(gè)直接訪問操作系統(tǒng)資源的工具類(底層c++實(shí)現(xiàn)),它可以直接分配內(nèi)存,內(nèi)存復(fù)制,copy,提供cpu級(jí)別的CAS樂觀鎖等操作...

    ideaa 評(píng)論0 收藏0
  • 【實(shí)戰(zhàn)Java高并發(fā)程序設(shè)計(jì)】連載1–Java中的指針:Unsafe

    摘要:不難看出,方法的內(nèi)部,必然是使用原子指令來完成的。它是一個(gè)內(nèi)部使用的專屬類。注意根據(jù)類加載器的工作原理,應(yīng)用程序的類由加載。加載器沒有對(duì)象的對(duì)象,因此試圖獲得這個(gè)類加載器會(huì)返回。 如果你對(duì)技術(shù)有著不折不撓的追求,應(yīng)該還會(huì)特別在意incrementAndGet() 方法中compareAndSet()的實(shí)現(xiàn)?,F(xiàn)在,就讓我們更進(jìn)一步看一下它把!public final boolean co...

    EasonTyler 評(píng)論0 收藏0
  • Java并發(fā)編程-原子實(shí)現(xiàn)

    摘要:前言為了研究對(duì)原子類的實(shí)現(xiàn),從類開始,分析如果對(duì)原子操作的實(shí)現(xiàn)。保存著基礎(chǔ)數(shù)據(jù),使用修飾,可以保證該值對(duì)內(nèi)存可見,也是原子類實(shí)現(xiàn)的理論保障。使用自旋鎖來處理并發(fā)問題。 前言 為了研究Java對(duì)原子類的實(shí)現(xiàn),從AtomicInteger類開始,分析Java如果對(duì)原子操作的實(shí)現(xiàn)。 什么是原子操作? 原子操作是指不會(huì)被線程調(diào)度機(jī)制打斷的操作;這種操作一旦開始,就一直運(yùn)行到結(jié)束,中間不會(huì)有任何...

    gyl_coder 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<