重庆千锋Java培训分享知识点:Java内存模型

j105864">

      因為Java內存模型不僅是java重點要學習的技術知識,還是面試的時候經典面試題,希望引起同學們的重視,今天老師就來分享一下java內存模型的相關技術知識。不同的渠道,內存模型是不一樣的,但是jvm的內存模型標準是一致的。其實java的多線程並發問題都會反映在java的內存模型上,所謂線程安全無非是要操控多個線程對某個資源的有序拜訪或修改。總結java的內存模型,要解決兩個首要的問題:可見性和有序性。


    可見性: 多個線程之間是不能相互傳遞數據通信的,它們之間的交流只能經過同享變量來進行。Java內存模型(JMM)規定了jvm有主內存,主內存是多個線程同享 的。當new一個目標的時分,也是被分配在主內存中,每個線程都有自己的作業內存,作業內存存儲了主存的某些目標的副本,當然線程的作業內存大小是有限制的。當線程操作某個目標時,履行次序如下:


     (1) 從主存仿制變量到當前作業內存 (read and load),(3) 用作業內存數據改寫主存相關內容 (store and write),當一個同享變量在多個線程的作業內存中都有副本時,如果一個線程修改了這個同享變量,那麽其他線程應該可以看到這個被修改後的值,這就是多線程的可見性問題。


     有序性:線程在引證變量時不能直接從主內存中引證,如果線程作業內存中沒有該變量,則會從主內存中復制一個副本到作業內存中,完成後線程會引證該副本。當同一線程再度引證該字段時,有可能從頭從主存中獲取變量副本(read-load-use),也有可能直接引證本來的副本 (use),也就是說 read,load,use次序可以由JVM完成體系決議。


     線程不能直接為主存中字段賦值,它會將值指定給作業內存中的變量副本(assign),完成後這個變量副本會同步到主存儲區(store- write),至於何時同步往昔,依據JVM完成體系決議。有該字段,則會從主內存中將該字段賦值到作業內存中,這個進程為read-load,完成後線 程會引證該變量副本。


     知識就財富,這句話再IT行業顯示的尤其現實殘酷,懂就是懂,不懂就是不懂,所以各位同學,你的努力與否與你財富直接掛鉤。一起加油吧!JAVA內存模型的學習。Java內存模型規範了Java虛擬機與計算機內存是如何協同工作的。Java虛擬機是一個完整的計算機的一個模型,因此這個模型自然也包含一個內存模型——又稱為Java內存模型。如果你想設計表現良好的並發程序,理解Java內存模型是非常重要的。Java內存模型規定了如何和何時可以看到由其他線程修改過後的共享變量的值,以及在必須時如何同步的訪問共享變量。


     Java內存模型:Java虛擬機標準中將Java運行時數據分為六種。1.程序計數器:是一個數據結構,用於保存當時正常履行的程序的內存地址。Java虛擬機的多線程就是通 過線程輪番切換並分配處理器時刻來完成的,為了線程切換後能康復到正確的方位,每條線程都需求一個獨立的程序計數器,互不影響,該區域為“線程私有”。2.Java虛擬機棧:線程私有的,與線程生命周期相同,用於存儲局部變量表,操作棧,辦法返回值。局部變量表放著根本數據類型,還有目標的引證。


     3.本地辦法棧:跟虛擬機棧很像,不過它是為虛擬機使用到的Native辦法服務。4.Java堆:所有線程同享的一塊內存區域,目標實例簡直都在這分配內存。5.辦法區:各個線程同享的區域,貯存虛擬機加載的類信息,常量,靜態變量,編譯後的代碼。6.運行時常量池:代表運行時每個class文件中的常量表。包含幾種常量:編譯時的數字常量、辦法或許域的引證。




相关文章
推荐文章
热门文章

微信公众号推荐

相关推荐