日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java map集合 事务控制_对象回收过程?线程池执行过程? map原理?集合类关系?synchronized 和 volatile ? 同一个类的方法事务传播控制还有作用吗?java 锁...

發布時間:2023/12/10 编程问答 27 豆豆

1. ?對象回收過程?

可達性分析算法: 如果一個對象從 GC Roots 不可達時,則證明此對象不可用。 通過一系列稱為GC ROOTS的對象作為起點,從這些起點往下搜索,搜索走過的路徑

稱為引用鏈,當一個對象到GC ROOTS 沒有任何引用鏈,我們判定這個對象是可回收的。。

在java 中,可作用GC ROOTS對象的包括:

虛擬機棧(棧針中本地變量表)中引用的對象,

方法區中類靜態屬性引用的對象,

方法區中常量引用的對象,

本地方法棧中即native 引用的對象。。

具體過程: ?在對象不可達時,也并不是非死不可,要真正宣告一個對象死亡,需要進行兩次標記過程: 如果一個對象在進行可達性分析后沒有與GC ROOTS 的相連接的

引用鏈,那將會被第一次標記并進行一次篩選: 篩選的目的是判定是否執行finalize方法,當對象沒有覆蓋finalize 方法,或者finalize 方法已經被虛擬機

調用過,虛擬機認定這兩種情況為不必要執行finalize方法。

如果需要執行finalize方法,那么這個對象將會放置在一個F-Queue 隊列中,并在稍后建立一個低優先級的線程來執行它。 finalize 方法是對象逃離死亡的

最后機會,在執行finalize 方法時會對F-Queue中的對象進行第二次標記,如果對象在finalize 方法中成功拯救自己(如把this賦值給某個變量,總之就是讓

對象出現引用鏈),則講該對象移出隊列。剩下的對象就只能等待被回收了。

5. ?synchronized 和 volatile

volatile 修飾的變量對所有線程具有可見性 , 意思是如果一個線程修改了 該變量,另一個線程可以立即獲得修改后的新值。但是這個并不是原子性的,在并發

情況下并不是安全的:原因是多個線程在做運算前獲取的可能是臟數據,如何 變量++ 操作,先獲取變量值,然后+1, 多個線程獲取的是臟數據。

volatile 禁止指令重排序優化:指令重排是指java 編譯成機器碼時會優化語句執行順序。 如線程A在執行某些操作后把某個變量賦值true, 另一個線程判斷true 做一些操作,

指令重排后可能到指線程A 在某些操作 完成之前就把 變量賦值true了。。導致線程B判斷true后并不能獲取正確的結果(比如我要獲取線程A的某些操作結果)

總結

以上是生活随笔為你收集整理的java map集合 事务控制_对象回收过程?线程池执行过程? map原理?集合类关系?synchronized 和 volatile ? 同一个类的方法事务传播控制还有作用吗?java 锁...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。