原创 第3篇 Linux系統編程--線程生命週期與狀態

在上一篇中,我們已經通過知道如何創建多個線程,本篇會談論到線程的生命週期,在此之前應該瞭解一下線程在一個進程中的內存佈局 主線程和線程棧 每個棧都是一個獨立的虛擬內存分配,可以將其放置在任意位置。重要的是要注意,棧的大小通常是有限的。

原创 new Object()到底佔用幾個字節,看完這篇徹底明白了!

前言 Java虛擬機棧是線程私有的,沒有數據安全問題,而堆相比較於Java虛擬機棧而言更爲複雜,因爲堆是所有線程共享的一塊內存空間,會出現線程安全性問題,而垃圾回收也主要是回收堆內空間,所以堆內的佈局我們非常有必要深入去了解一下。現在就讓

原创 很多人都不知曉的CPU訪問內存知識!

CPU是怎樣訪問內存的?簡單的答案是,CPU執行一條訪存指令,把讀寫請求發往內存管理單元。內存管理單元進行虛實轉換,把命令發往總線。總線把命令傳遞給內存控制器,內存控制器再次翻譯地址,對相應內存顆粒進行存取。之後,讀取的數據寫入確認按照原路

原创 Volatile的實現及內存屏障

爲什麼會有內存屏障 每個CPU都會有自己的緩存(有的甚至L1,L2,L3),緩存的目的就是爲了提高性能,避免每次都要向內存取。但是這樣的弊端也很明顯:不能實時的和內存發生信息交換,分在不同CPU執行的不同線程對同一個變量的緩存值不同。

原创 看tomcat源碼的一點理解

http連接的表現就是socket對象 客戶端連接服務端時,先隨機分配一個端口去連接服務器的80端口,然後服務器會另外隨機分配一個端口與客戶端通信,該端口由一個socket持有。在程序上的表現就是:當這個socket還存在,就意味着客戶端

原创 LINUX SYSTEM CALL TABLE FOR X86 64 內核系統調用

LINUX SYSTEM CALL TABLE FOR X86 64 PUBLISHED THU, NOV 29, 2012 Linux 4.7 (pulled from github.com/torvalds/linux on Jul

原创 進程的同步、互斥以及PV原語

操作系統P,V(wait,signal原語)操作講解,以及兩個例題(答案僅供參考) 操作系統的pv操作是很核心的概念。 臨界區 : 我們把併發進程中與共享變量有關的程序段稱爲臨界區。 信號量 : 信號量的值與相應資源的使用情況有關。當它的

原创 Java中的管程模型

  操作系統使用信號量解決併發問題,Java選擇使用管程(Monitor)解決併發問題。信號量和管程是等價的,可以使用信號量實現管程,也可以使用管程實現信號量。 管程就是指管理共享變量,以及對共享變量的相關操作。具體到 Java 語言中,

原创 四、Kafka的元數據-MetaData

1、元數據(MetaData): 服務器活動狀態 Topic和Topic的分區 Partition都有哪些Replication 哪個Replication是Leader ps: 一般情況下,客戶端會把元數據緩存起來,並直接往目標Broke

原创 linux查看tcp連接狀態_TCP 半連接隊列和全連接隊列滿了會發生什麼?又該如何應對?

(給Linux愛好者加星標,提升Linux技能) 轉自:小林coding(本文來自作者投稿) 前言 網上許多博客針對增大 TCP 半連接隊列和全連接隊列的方式如下: 增大 TCP 半連接隊列方式是增大 tcp_max_syn_ba

原创 zookeeper_節點數據版本號問題

轉自:Simba_cheng 更新節點數據的方法: 同步方法:Stat setData(final String path, byte data[], int version) 異步方法:void setData(final Str

原创 圖解!8張圖揭祕樹和森林

說起樹,想必大多數人第一反應都是二叉樹以及二叉樹的各種親戚,包括紅黑樹、平衡二叉樹等。但是其實除了二叉樹外,普通的樹結構在數據結構中也佔據着非常重要的一部分。 不僅如此,所謂百川成海,白木成林。既然有了樹結構,自然而然也會有相應的森林結構。

原创 park和unpark底層源碼解讀

Unsafe和LockSupport         Java併發包下的類基本都是基於AQS (AbstractQueuedSynchronizer)框架實現的,關於AQS我在前面講解ReentrantLock源碼的文章中就已經有涉及了。

原创 JVM系列6-GC算法

目錄 一、如何判定垃圾? 1.1.Reference Count引用計數法:引用計數count=0的對象 1.2.Root Seaching根可達法:從root開始不可達的對象 二、常用GC算法 2.1 3種GC算法 2.2 分

原创 跳錶,紅黑樹,b+樹,hashmap的區別?

跳錶,紅黑樹,b+樹,hashmap因爲在其數據結構上的不同而體現出不同的性能,本文從下列角度來權衡各種結構的利弊,加深對各種結構的理解。 1.爲什麼mysql使用b+樹而不是紅黑樹或者hashmap? 2.爲什麼redis使用跳錶而不是