08-JVM 面試題-mk

文章目錄

  • 1.JVM 的各部分組成
  • 2.運行時數據區
    • 2.1.什么是程序計數器?
    • 2.2.你能給我詳細的介紹Java堆嗎?
    • 2.3.能不能解釋一下方法區?
      • 2.3.1常量池
      • 2.3.2.運行時常量池
    • 2.4.什么是虛擬機棧?
      • 2.4.1.垃圾回收是否涉及棧內存?
      • 2.4.2.棧內存分配越大越好嗎?
      • 2.4.3.方法內的局部變量是否線程安全?
      • 2.4.4.什么情況下會導致棧內存溢出?
  • 3.你聽過直接內存嗎?
  • 4.什么是類加載器,類加載器有哪些?
    • 4.1.什么是類加載器
    • 4.2.類加載器有哪些?
    • 4.3.什么是雙親委派模型?
    • 4.4JVM為什么采用雙親委派機制?
  • 5.說一下類裝載的執行過程?
  • 6.對象什么時候可以被垃圾器回收 ?
    • 6.1.引用計數法
    • 6.2.可達性分析算法
  • 7.JVM 垃圾回收算法有哪些?
    • 7.1.標記清除算法
    • 7.2.標記整理算法
    • 7.3.復制算法
  • 8.說一下JVM中的分代回收
    • 8.1.分代收集算法
    • 8.2.MinorGC、 Mixed GC 、 FullGC的區別是什么
  • 9.說一下JVM有哪些垃圾回收器?
    • 9.1.串行垃圾收集器
    • 9.2.并行垃圾收集器
    • 9.3.CMS(并發)垃圾收集器
    • 9.4.詳細聊一下G1垃圾回收器
  • 10.強引用、軟引用、弱引用、虛引用的區別?
  • 11.JVM 調優的參數可以在哪里設置參數值
    • 11.1.war包部署在tomcat中設置
    • 11.2.jar包部署在啟動參數設置
  • 12.什么時候用到 JVM 調優,調優哪些參數?
  • 13.JVM 調優的參數都有哪些?
    • 13.1.設置堆空間大小(放對象和數組)
    • 13.2.虛擬機棧的設置
    • 13.3.年輕代中Eden區和兩個Survivor區的大小比例
    • 13.4.年輕代晉升老年代閾值
    • 13.5.設置垃圾回收收集器
  • 14.說一下 JVM 調優的工具?
  • 15.Java內存泄露的排查思路
  • 16.CPU飆高排查方案與思路
  • 17.cpu 比較低,load 比較高怎么解決

1.JVM 的各部分組成

知道JVM 的好處:知道java 運行機制,排查問題的能力增加,比如內存泄漏、CPU飆高

JVM 是什么:Java Virtual Machine縮寫,Java程序的運行環境(java二進制字節碼的運行環境)

好處

  • 一次編寫,到處運行
  • 自動內存管理,垃圾回收機制

在這里插入圖片描述

從圖中可以看出 JVM 的主要組成部分

  • ClassLoader(類加載器):負責將 .class 文件加載到 JVM 中,并轉換為運行時數據結構(Class 對象)
  • Runtime Data Area(運行時數據區):管理程序運行時的內存分配和數據存儲
  • Execution Engine(執行引擎):把字節碼翻譯為底層系統指令
    • 解釋器:解釋字節碼信息
    • 即時編譯器:針對代碼進行優化
    • GC:主要是指運行數據區中的堆空間
  • Native Method Library(本地庫接口):由C或C++實現,因為Java代碼并不能實現某些功能,需要借助系統提供的接口(本地方法接口)

重點講解下面部分:

JVM組成:重點介紹運行數據區

類加載器:主要指類加載子系統(比如:一個類的生命周期是什么、常見的類加載器有哪些)

垃圾回收:主要指的是堆中的對象垃圾回收,包含了垃圾回收算法、垃圾回收器、怎么去設置

JVM實踐:JVM 調優的一些內容,比如參數怎么設置,該設置多少?出錯了怎么辦?比如內存泄漏問題、CPU飆高問題

2.運行時數據區

管理程序運行時的內存分配和數據存儲
在這里插入圖片描述
分為以下部分

  1. 線程共享區域

    • 方法區(Method Area)
      • 存儲類的元數據(類名、類的結構、方法信息、字段信息)、靜態變量、常量池等。
      • JDK 8 后由元空間(Metaspace)實現,直接使用本地內存。
    • 堆(Heap)
      • 存儲所有對象實例和數組,是垃圾回收(GC)的主要區域。
      • 分為新生代(Eden、Survivor區)和老年代。
  2. 線程私有區域

  • 虛擬機棧(JVM Stack)
    • 每個方法調用對應一個棧幀(存儲局部變量表、操作數棧、動態鏈接、方法出口)。
    • 棧深度超出限制時拋出 StackOverflowError。
  • 本地方法棧(Native Method Stack)
    • 為 Native 方法(如 C/C++ 實現的方法)服務。
  • 程序計數器(Program Counter Register)
    • 記錄當前線程執行的字節碼指令地址(分支、循環、異常處理依賴此區域)。

2.1.什么是程序計數器?

屬于運行數據區的一部分,是線程私有的(沒有線程安全問題),每個線程都有一份,內部保存的字節碼的行號。用于記錄正在執行的字節碼指令的地址

javap -v xx.class 打印每個方法的詳細信息,包括字節碼指令(操作碼)、局部變量表、操作數棧等。
在這里插入圖片描述
什么是程序計數器?

屬于運行數據區的一部分,是線程私有的(沒有線程安全問題),每個線程都有一份,內部保存的字節碼的行號。用于記錄正在執行的字節碼指令的地址

2.2.你能給我詳細的介紹Java堆嗎?

它是線程共享的區域(有線程安全問題),主要用來保存實例,數組等,當堆中沒有內存空間可分配給實例,也無法再擴展時,則拋出OutOfMemoryError異常。

下圖是運行數據區
在這里插入圖片描述
S0、S1也被成為幸存者區 ,一個對象來了之后先會到Eden(伊甸)區,假如這個對象在垃圾回收之后還存活,就會被復制移動到S0或者S1,假如對象移動一定次數還存活著,就會被放到老年代中,老年代是指生命周期比較長的

  1. 年輕代被劃分為三部分,Eden區和兩個大小嚴格相同的Survivor區,根據JVM的策略,在經過幾次垃圾收集后,任然存活于Survivor的對象將被移動到老年代區間。
  2. 老年代主要保存生命周期長的對象,一般是一些老的對象
  3. 元空間(方法區)保存的類名、類的結構、方法信息、字段信息、靜態變量、常量池等

java1.7和java1.8 堆的區別是什么?

在java1.8 之前,堆中有個永久代概念,和元空間的作用是一樣的。因為元空間或方法區,主要存儲的是一些類或者常量,隨著項目類加載越來越多,java 1.7的永久代不可控,如果設置小了,就會存在內存溢出,設置大了會浪費內存,java1.8做了優化,都放到本地內存,這樣堆節省空間,防止內存溢出,避免OOM。

在這里插入圖片描述
你能給我詳細的介紹Java堆嗎?

  • 線程共享的區域:主要用來保存對象實例,數組等,內存不夠則拋出OutOfMemoryError異常。
  • 組成:年輕代+老年代
    • 年輕代被劃分為三部分,Eden區和兩個大小嚴格相同的Survivor區
    • 老年代主要保存生命周期長的對象,一般是一些老的對象
  • Jdk1.7和1.8的區別
    • 1.7中有有一個永久代,存儲的是類名、類的結構、方法信息、字段信息、靜態變量、常量池等
    • 1.8移除了永久代,把數據存儲到了本地內存的元空間中,防止內存溢出

2.3.能不能解釋一下方法區?

屬于運行數據區的一部分

  • 方法區(Method Area)是各個線程共享的內存區域
  • 存儲類的元數據(類名、類的結構、方法信息、字段信息)、靜態變量、常量池等
  • 虛擬機啟動的時候創建,關閉虛擬機時釋放
  • 如果方法區域中的內存無法滿足分配請求,則會拋出OutOfMemoryError: Metaspace

在這里插入圖片描述

方法區邏輯上屬于堆的一部分,但是不同廠商,存儲的位置不一樣,我們現在用的時oracle 提供的hotpot 虛擬機,在JDK8 之前,方法區是存在堆中一個叫永久代這個區域中,在JDK8 之后,把永久代給移除了,換了一個實現,這個實現叫做元空間,元空間不在堆內存中,用的是本地內存,也就是操作系統內存,為什么會挪動?避免OOM

  • Class:類的信息,包括了類名、類的結構、方法、字段等
  • Classloader:來加載這個類

2.3.1常量池

可以看作是一張表,虛擬機指令根據這張常量表找到要執行的類名、方法名、參數類型、字面量等信息
javap -v Application.class ,查看字節碼結構(類的基本信息、常量池、方法定義)

下圖,左側是main方法的指令信息,右側constant pool 是常量池,main方法按照指令執行的時候,需要到常量池中查表翻譯找到具體的類和方法地址去執行
在這里插入圖片描述

2.3.2.運行時常量池

常量池是 *.class 文件中的,當該類被加載,它的常量池信息就會放入運行時常量池,并把里面的符號地址變為真實地址 (真正的內存地址)
在這里插入圖片描述
能不能解釋一下方法區?

  • 方法區(Method Area)是各個線程共享的內存區域
  • 主要存儲類名、類的結構、方法信息、字段信息、靜態變量、常量池
  • 虛擬機啟動的時候創建,關閉虛擬機時釋放
  • 如果方法區域中的內存無法滿足分配請求,則會拋出OutOfMemoryError: Metaspace

介紹一下運行時常量池

  • 常量池:可以看作是一張表,虛擬機指令根據這張常量表找到要執行的類名、方法名、參數類型、字面量等信息
  • 當類被加載,它的常量池信息就會放入運行時常量池,并把里面的符號地址變為真實地址

2.4.什么是虛擬機棧?

Java Virtual machine Stacks (java 虛擬機棧)

  • 每個線程運行時所需要的內存,稱為虛擬機棧(多個線程也會創建多個虛擬機棧,是線程私有、線程安全的),先進后出(什么時候創建虛擬機棧?
  • 每個棧由多個棧幀(frame)組成(方法會調用其它方法,產生多個棧幀),對應著每次方法調用時所占用的內存(每個棧幀包含方法所需要的數據,比如參數、局部變量、返回地址
  • 每個線程只能有一個活動棧幀,對應著當前正在執行的那個方法

在這里插入圖片描述

2.4.1.垃圾回收是否涉及棧內存?

垃圾回收主要指就是堆內存,當棧幀彈棧以后,內存就會釋放

2.4.2.棧內存分配越大越好嗎?

未必,默認的棧內存通常為1024k,棧幀過大會導致線程數變少(每個線程都會創建虛擬機棧),例如,機器總內存為512m,目前能活動的線程數則為512個,如果把棧內存改為2048k,那么能活動的棧幀(或者線程)就會減半

2.4.3.方法內的局部變量是否線程安全?

  • 如果方法內局部變量沒有逃離方法的作用范圍,它是線程安全的
  • 如果是局部變量引用了對象(形參StringBuilder),并逃離方法的作用范圍,需要考慮線程安全

m1方法線程安全,m2 和m3 方法不安全

m1:每個線程來了之后,都會創建棧幀,每個棧幀都會有局部變量sb,每個線程都是獨有的,并沒有線程安全問題

m2:形參sb也是局部變量,在參數傳遞過程中,有可能會被其它線程操作。比如主線程中創建了一個StringBuilder對象sb,又在新線程里面把sb作為參數傳給了m2方法,主線程和新線程都在修改sb,sb是主線程和新線程共享的,線程不安全。

m3:會把局部變量返回,這個局部變量有可能會被其它線程共用,可以在mian 方法中調用m3 方法,得到局部變量,然后在mian 方法中開啟多線程同時去操作這個變量,也成了多個線程共用的變量
在這里插入圖片描述

2.4.4.什么情況下會導致棧內存溢出?

  • 棧幀過多導致棧內存溢出(java.lang.StackOverflowError),典型問題:遞歸調用
  • 棧幀過大導致棧內存溢出(1M內存,不太容易出現)
public static void m4()
{m4();
}

1.什么是虛擬機棧

  • 每個線程運行時所需要的內存,稱為虛擬機棧,它是先進后出的特點
  • 每個棧由多個棧幀(frame)組成,對應著每次方法調用時所占用的內存
  • 每個線程只能有一個活動棧幀,對應著當前正在執行的那個方法

2.垃圾回收是否涉及棧內仔?

  • 垃圾回收主要指就是堆內存,當棧幀彈棧以后,內存就會釋放

3.棧內存分配越大越好嗎?

  • 未必,默認的棧內存通常為1024K,棧幀過大會導致線程數變少

4.方法內的局部變量是否線程安全?

  • 如果方法內局部變里沒有逃離方法的作用范圍,它是線程安全的
  • 如果是局部變量引用了對象,并逃離方法的作用范圍,需要考慮線程安全

5.什么情況下會導致棧內存溢出?

  • 棧幀過多導致棧內存溢出,典型問題:遞歸調用
  • 棧幀過大導致棧內存溢出

6.堆和棧的區別是什么?

  • 棧內存一般會用來存儲方法調用的棧幀、局部變量、操作數棧等,但堆內存是用來存儲Java對象和數組的。堆會GC垃圾回收,而棧不會。
  • 棧內存是線程私有的,而堆內存是線程共有的。
  • 兩者異常錯誤不同,但如果棧內存或者堆內存不足都會拋出異常。
    • 棧空間不足:java.lang.StackOverFlowError。
    • 堆空間不足:java.lang.OutOfMemoryError。

3.你聽過直接內存嗎?

并不屬于JVM中的內存結構,不由JVM進行管理。是虛擬機的系統內存(操作系統內存),常見于 NIO 操作時,用于數據緩沖區,它分配回收成本較高,但讀寫性能高
在這里插入圖片描述
IO

java 本身不具有磁盤讀寫能力,要調用磁盤讀寫,必須調用操作系統提供的函數,會調用本地的方法,native 修飾的方法都是操作系統提供的方法,使用native 修飾的方法去操作磁盤文件。 這里涉及到CPU的運行狀態,會從java 的 用戶態切換到內核態,這是CPU狀態的改變,其次內存也有一系列操作,當切換到內核態之后,會由CPU 的函數讀取磁盤文件,會在操作系統中劃出一塊緩沖區,這個緩沖區我們也稱為系統緩存區,磁盤內容會讀到系統緩存區中,它不能把幾百兆的數據一次性全部讀到系統緩存區中,會利用緩沖區分批次進行讀取,讀到系統的緩存區,這個系統緩沖區,我們java 代碼是不能操作的,java 會在堆中分配一塊內存,對應代碼中 new byte[] ,會劃分java 的緩沖區,我們代碼要想訪問剛才讀到的流中數據,必須要從系統的緩存區讀到java 的緩沖區,讀到java 的緩沖區會進入java 的下一個狀態(用戶態),會調用輸出流的寫入操作,這樣反復進行讀寫,這個文件會復制到目標位置。也發現問題所在,有兩個緩沖區,有兩塊內存,一個是系統提供的系統緩存區,另一個是java 的緩沖區,讀取數據的時候,數據要存兩份,第一次讀到系統緩沖區,第二次讀到java 緩沖區,因為java 代碼訪問不了系統緩沖區,必須讀到java 緩沖區之后,java 代碼才能進行操作,這就造成不必要的數據復制,因此效率不是很高

在這里插入圖片描述
NIO

操作系統中劃出了一塊緩沖區,這個區域叫直接內存,系統也可以訪問,java 代碼可以直接訪問。磁盤文件讀寫的時候,java 代碼操作非常方便,比IO少了一次緩沖區的復制操作,所以說速度成倍的提升
在這里插入圖片描述
你聽過直接內存嗎?

  • 并不屬于JVM中的內存結構,不由JVM進行管理。是虛擬機的系統內存
  • 常見于 NIO 操作時,用于數據緩沖區,分配回收成本較高,但讀寫性能高,不受 JVM 內存回收管理

4.什么是類加載器,類加載器有哪些?

  • 類加載器:負責將 .class 文件加載到 JVM 中,并轉換為運行時數據結構(Class 對象)
  • 運行時數據區:管理程序運行時的內存分配和數據存儲
  • 執行引擎:執行字節碼文件或本地方法,把字節碼翻譯為底層系統指令
  • 垃圾回收器:用于對JVM中的垃圾內容進行回收

在這里插入圖片描述
什么是類加載器,類加載器有哪些 ?

類加載器:JVM只會運行二進制文件,負責將 .class 文件加載到 JVM 中,并轉換為運行時數據結構(Class 對象),從而讓Java程序能夠啟動起來。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77036.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77036.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77036.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue3 nextTick

nextTick 是 Vue 中非常重要的一個 API&#xff0c;它允許你在 DOM 更新周期后執行延遲回調。 核心源碼位置 Vue3 的 nextTick 實現主要在 packages/runtime-core/src/scheduler.ts 文件中。 基本實現 const resolvedPromise Promise.resolve() as Promise<any> let …

DISCO:利用大型語言模型提取反事實

DISCO: Distilling Counterfactuals with Large Language Models - ACL Anthologyhttps://aclanthology.org/2023.acl-long.302/ 1. 概述 盡管在自然語言處理(NLP)領域針對各種推理任務取得了巨大進展(Wang 等, 2018, 2019a;Xu 等, 2020),但數據集偏差仍然是構建魯棒模型…

【Django】框架-路由系統核心概念解析

1. 最基本路由關系 路由是URL地址與處理邏輯&#xff08;視圖函數&#xff09;的對應關系。 本質&#xff1a;將用戶請求的URL路徑映射到具體的處理程序&#xff08;如Django視圖函數&#xff09;。 示例&#xff1a; # urls.py urlpatterns [ path(home/, views.home_…

理解 results = model(source, stream=True) 的工作原理和優勢

1. 核心概念解析 (1) streamTrue 的作用 生成器模式&#xff1a;當處理視頻或圖像序列時&#xff0c;streamTrue 會將結果包裝成一個 生成器&#xff08;Generator&#xff09;&#xff0c;逐幀生成 Results 對象&#xff0c;而不是一次性返回所有結果。內存優化&#xff1a;…

重新定義“邊緣”:邊緣計算如何重塑人類與數據的關系

在數字化浪潮中&#xff0c;云計算曾是科技界的寵兒&#xff0c;但如今&#xff0c;邊緣計算正在悄然改變游戲規則。它不僅是一種技術進步&#xff0c;更是對人類與數據關系的一次深刻反思。本文將探討邊緣計算如何從“中心化”走向“分布式”&#xff0c;以及它如何在效率、隱…

MCP 協議知識分享

MCP 協議知識分享 一、MCP 協議概述1.1 定義與背景1.2 核心價值1.3 與傳統 API 的對比 二、技術架構與工作原理2.1 核心組件2.2 通信機制2.3 典型工作流程 三、關鍵技術與應用場景3.1 核心技術3.2 典型應用場景 四、與微軟技術的集成4.1 Azure OpenAI 服務4.2 Playwright MCP 服…

策略模式實現 Bean 注入時怎么知道具體注入的是哪個 Bean?

Autowire Resource 的區別 1.來源不同&#xff1a;其中 Autowire 是 Spring2.5 定義的注解&#xff0c;而 Resource 是 Java 定義的注解 2.依賴查找的順序不同&#xff1a; 依賴注入的功能&#xff0c;是通過先在 Spring IoC 容器中查找對象&#xff0c;再將對象注入引入到當…

Linux》》bash 、sh 執行腳本

通常使用shell去運行腳本&#xff0c;兩種方法 》bash xxx.sh 或 bash “xxx.sh” 、sh xxx.sh 或 sh “xxx.sh” 》bash -c “cmd string” 引號不能省略 我們知道 -c 的意思是 command&#xff0c;所以 bash -c 或 sh -c 后面應該跟一個 command。

【解析】ReentrantLock鎖、Syschronized鎖面試點解析

面試官提問 ● 公平鎖與非公平鎖的區別是什么&#xff1f; ● 什么是可重入鎖&#xff1f; ● 什么是死鎖&#xff0c;怎樣避免死鎖&#xff1f; ● ReentrantLock與Syschronized實現原理是什么&#xff1f;兩者有什么區別&#xff1f; ● 請說明ReentrantLock獲取鎖與釋放…

04.Python代碼NumPy-通過索引或切片來訪問和修改

04.Python代碼NumPy-通過索引或切片來訪問和修改 提示&#xff1a;幫幫志會陸續更新非常多的IT技術知識&#xff0c;希望分享的內容對您有用。本章分享的是Python基礎語法。前后每一小節的內容是存在的有&#xff1a;學習and理解的關聯性&#xff0c;希望對您有用~ python語法…

跨平臺數據采集如何解決不同平臺之間的數據兼容性問題?

在數字化時代&#xff0c;企業越來越依賴多個信息系統來管理業務&#xff0c;例如ERP&#xff08;企業資源計劃&#xff09;、CRM&#xff08;客戶關系管理&#xff09;、財務管理系統、電商平臺等。然而&#xff0c;在進行跨平臺數據采集時&#xff0c;不同系統之間的數據格式…

解決 vite.config.ts 引入scss 預處理報錯

目錄 報錯1&#xff1a;[plugin:vite:css] [SASS] Error&#xff1a;Cant find stylesheet to import 報錯2&#xff1a;[plugin:vite:css] [sass] Error: Undefined variable 版本號&#xff1a; "sass": "^1.86.3","sass-loader": "^1…

C++筆記,數學函數

參考鏈接&#xff1a;C中數學函數的使用方法_cpp里指數函數-CSDN博客 頭文件 <cmath> 1. 基本的算數運算函數 1.1 sqrt() - 計算平方根 功能&#xff1a;計算一個非負實數的平方根。原型&#xff1a;double sqrt(double x);示例代碼&#xff1a; #include <iostr…

不關“貓”如何改變外網IP?3種免重啟切換IP方案

每次更換外網IP都要重啟路由器&#xff1f;太麻煩了&#xff01;那么&#xff0c;不關貓怎么改變外網IP&#xff1f;無論是為了網絡調試、爬蟲需求&#xff0c;還是解決IP限制問題&#xff0c;頻繁重啟設備既耗時又影響效率。其實&#xff0c;更換外網IP并不一定要依賴“重啟大…

道路運輸安全員企業負責人考試內容與范圍

道路運輸企業主要負責人&#xff08;安全員&#xff09;考證要求 的詳細說明&#xff0c;適用于企業法定代表人、分管安全負責人等需取得的 《道路運輸企業主要負責人和安全生產管理人員安全考核合格證明》&#xff08;交通運輸部要求&#xff09;。 考試內容與范圍 1. 法律法…

深入剖析 WiFi 定位解析功能:原理、技術優勢與應用場景

WiFi 定位解析功能的原理? 信號強度與距離的關系? WiFi 定位的核心原理基于無線信號傳播過程中的一個基本特性&#xff1a;信號強度與信號發射源&#xff08;即 WiFi 接入點&#xff0c;Access Point&#xff0c;簡稱 AP&#xff09;和接收設備之間距離的關聯。一般來說&am…

NVIDIA RTX? GPU 低成本啟動零售 AI 場景開發

零售行業正在探索應用 AI 升級客戶體驗&#xff0c;同時優化內部流程。面對多重應用場景以及成本優化壓力&#xff0c;團隊可采用成本相對可控的方案&#xff0c;來應對多重場景的前期項目預演和落地&#xff0c;避免短期內大規模投入造成的資源浪費。 客戶體驗 AI 場景的研究…

首次打藍橋杯總結(c/c++B組)

目錄 一、對每個題進行總結 1.填空題 2.第一個大題---可分解的正整數&#xff08;10--3&#xff09; 3.第二道大題---產值調整&#xff08;10--3&#xff09; 4.第三道大題---畫展部署&#xff08;15--7&#xff09; 5.第四道大題---水質檢測&#xff08;15--3&#x…

林納斯·托瓦茲:Linux系統之父 Git創始人

名人說&#xff1a;路漫漫其修遠兮&#xff0c;吾將上下而求索。—— 屈原《離騷》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 林納斯托瓦茲&#xff1a;Linux之父、Git創始人 一、傳奇人物的誕生 1. 早年生活與家…

C語言多進程素數計算

題目描述&#xff1a; 以下代碼實現了一個多進程素數計算程序&#xff0c;通過fork()函數創建子進程來并行計算指定范圍內的素數。請仔細閱讀代碼并回答以下問題。 #include "stdio.h" #include "unistd.h" #include <sys/types.h> #include "…