jvm內存模型,類加載機制,GC算法,垃圾回收器,jvm線上調優等常見的面試題及答案

JVM內存模型

  • JVM內存模型包括哪些區域
    • 答案:JVM內存模型主要包括以下區域:
      • 程序計數器:是一塊較小的內存空間,它可以看作是當前線程所執行的字節碼的行號指示器,用于記錄正在執行的虛擬機字節碼指令的地址。
      • Java虛擬機棧:每個方法在執行的同時都會創建一個棧幀,用于存儲局部變量表、操作數棧、動態鏈接、方法出口等信息。
      • 本地方法棧:與Java虛擬機棧類似,不過它是為Native方法服務的。
      • Java堆:是JVM所管理的內存中最大的一塊,是被所有線程共享的一塊內存區域,幾乎所有的對象實例以及數組都在這里分配內存。
      • 方法區:用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據。在Java 8及之后版本中,永久代被移除,取而代之的是元空間,元空間并不在堆內存中,而是使用本地內存。
  • 堆內存的結構是怎樣的
    • 答案:堆內存分為年輕代和老年代,年輕代又分為Eden空間和兩個Survivor空間(一般稱為Survivor from和Survivor to)。新創建的對象一般會先分配到Eden區,當Eden區滿了之后,會觸發Minor GC,存活下來的對象會被移動到Survivor區。在Survivor區經過多次GC后仍然存活的對象,會被移動到老年代。老年代主要存放生命周期較長的對象。

類加載機制

  • 什么是類加載
    • 答案:類加載是指將Java類的字節碼文件(.class文件)轉換成內存中運行時數據結構(如java.lang.Class對象)的過程。這個過程由Java虛擬機的類加載器完成,是Java動態性的基礎。
  • 類加載的時機有哪些
    • 答案:Java虛擬機采用惰性加載策略,類會在以下幾種情況下被加載:
      • 創建類的實例,通過new關鍵字或反射機制。
      • 訪問類的靜態變量或靜態方法,注意是主動訪問。
      • 反射調用,如通過Class.forName()等方法顯式加載類。
      • 初始化類的子類,此時父類也會被加載(若尚未加載)。
      • JVM啟動時指定的主類,即包含main方法的類。

GC算法

  • GC有哪些常見的判定對象可回收的方法
    • 答案
      • 引用計數法:給對象添加一個引用計數器,每當有一個地方引用它時,計數器值就加1;當引用失效時,計數器值就減1,當計數器為0時,就認為這個對象可以被回收。但這種方法存在循環引用的問題,導致對象無法被回收。
      • 可達性分析算法:通過一系列的“GC Roots”對象作為起始點,從這些節點開始向下搜索,搜索所走過的路徑稱為引用鏈,當一個對象到GC Roots沒有任何引用鏈相連時,則證明此對象是不可用的,即可以被回收。
  • GC的三種收集方法及其原理與特點
    • 答案
      • 標記-清除算法:分為標記和清除兩個階段。首先標記出所有需要回收的對象,在標記完成后,統一回收所有被標記的對象。優點是實現簡單,缺點是容易產生內存碎片,導致后續大對象無法分配內存。
      • 復制算法:將可用內存按容量劃分為大小相等的兩塊,每次只使用其中的一塊。當這一塊的內存用完了,就將還存活著的對象復制到另外一塊上面,然后再把已使用過的內存空間一次清理掉。優點是不會產生內存碎片,缺點是內存利用率低,只使用了一半的內存。
      • 標記-壓縮(標記-整理)算法:標記階段和標記-清除算法一樣,標記出所有需要回收的對象,清除階段不是直接清理被標記的對象,而是將所有存活的對象向一端移動,然后直接清理掉邊界以外的內存。優點是解決了內存碎片問題,同時內存利用率比復制算法高,缺點是移動對象時需要一定的開銷。

垃圾回收器

  • 常見的垃圾回收器有哪些
    • 答案:常見的垃圾回收器有Serial、Serial Old、ParNew、Parallel Scavenge、Parallel Old、CMS、G1等。
  • CMS收集器與G1收集器的特點
    • 答案
      • CMS收集器:是一種以獲取最短回收停頓時間為目標的收集器。采用“標記-清除”算法,具有并發收集、低停頓的特點,但是會產生內存碎片,并且對CPU資源非常敏感,在并發階段會和用戶線程搶占CPU資源。
      • G1收集器:是一種面向堆內存任何部分進行回收的收集器,將堆內存劃分為多個大小相等的獨立區域(Region),可以預測停頓時間,兼具高吞吐量和低延遲的特點,采用“標記-整理”算法,不會產生內存碎片,能更好地處理大對象和巨型對象。

JVM線上調優

  • 什么情況下需要進行JVM調優
    • 答案:出現以下情況時通常需要進行JVM調優:
      • Heap內存(老年代)持續上漲達到設置的最大內存值。
      • Full GC次數頻繁。
      • GC停頓(Stop The World)時間過長(超過1秒,具體值按應用場景而定)。
      • 應用出現OutOfMemory等內存異常。
      • 應用中有使用本地緩存且占用大量內存空間。
      • 系統吞吐量與響應性能不高或下降。
      • 應用的CPU占用過高不下或內存占用過高不下。
  • JVM調優時關注哪些指標
    • 答案
      • 吞吐量:用戶代碼時間/(用戶代碼執行時間+垃圾回收時間),吞吐量越高算法越好。
      • 低延遲:STW越短,響應時間越好,暫停時間越短算法越好。
      • Minor GC盡可能多的收集垃圾對象:遵守這一原則可以降低應用程序Full GC的發生頻率,因為Full GC較耗時,可能會影響應用程序的延遲要求或吞吐量。

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

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

相關文章

git clone的時候出現出現error

報錯如下: Collecting githttps://github.com/haotian-liu/LLaVA.git Cloning https://github.com/haotian-liu/LLaVA.git to /tmp/pip-req-build-360q6tt1 Running command git clone --filterblob:none --quiet https://github.com/haotian-liu/LLaVA.git /t…

Minio搭建并在SpringBoot中使用完成用戶頭像的上傳

Minio使用搭建并上傳用戶頭像到服務器操作,學習筆記 Minio介紹 minio官網 MinIO是一個開源的分布式對象存儲服務器,支持S3協議并且可以在多節點上實現數據的高可用和容錯。它采用Go語言開發,擁有輕量級、高性能、易部署等特點,并且可以自由…

vue3中ref和reactive響應式數據、ref模板引用(組合式和選項式區別)、組件ref的使用

目錄 Ⅰ.ref 1.基本用法:ref響應式數據 2.ref模板引用 3.ref在v-for中的模板引用 ?4.ref在組件上使用 ?5.TS中ref數據標注類型 Ⅱ.reactive 1.基本用法:reactive響應式數據 2.TS中reactive標注類型 Ⅲ.ref和reactive的使用場景和區別 Ⅳ.小結…

javascript實現雪花飄落效果

本文實現雪花飄落效果的 JavaScript 網頁設計案例&#xff0c;代碼實現如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, init…

項目準備(flask+pyhon+MachineLearning)- 3

目錄 1.商品信息 2. 商品銷售預測 2.1 機器學習 2.2 預測功能 3. 模型評估 1.商品信息 app.route(/products) def products():"""商品分析頁面"""data load_data()# 計算當前期間和上期間current_period data[data[成交時間] > data[成…

FPGA開發,使用Deepseek V3還是R1(3):系統級與RTL級

以下都是Deepseek生成的答案 FPGA開發&#xff0c;使用Deepseek V3還是R1&#xff08;1&#xff09;&#xff1a;應用場景 FPGA開發&#xff0c;使用Deepseek V3還是R1&#xff08;2&#xff09;&#xff1a;V3和R1的區別 FPGA開發&#xff0c;使用Deepseek V3還是R1&#x…

實現 Leaflet 多類型點位標記與聚合功能的實戰經驗分享

在現代的地理信息系統&#xff08;GIS&#xff09;應用中&#xff0c;地圖功能是不可或缺的一部分。無論是展示商業網點、旅游景點還是公共服務設施&#xff0c;地圖都能以直觀的方式呈現數據。然而&#xff0c;當數據量較大時&#xff0c;地圖上可能會出現大量的標記點&#x…

企微審批中MySQL字段TEXT類型被截斷的排查與修復實踐

在MySQL中&#xff0c;TEXT類型字段常用于存儲較大的文本數據&#xff0c;但在一些應用場景中&#xff0c;當文本內容較大時&#xff0c;TEXT類型字段可能無法滿足需求&#xff0c;導致數據截斷或插入失敗。為了避免這種問題&#xff0c;了解不同文本類型&#xff08;如TEXT、M…

【常見BUG】Spring Boot 和 Springfox(Swagger)版本兼容問題

???歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學習,不斷總結,共同進步,活到老學到老…

HTTP 協議的發展歷程:從 HTTP/1.0 到 HTTP/2.0

HTTP 協議的發展歷程&#xff1a;從 HTTP/1.0 到 HTTP/2.0 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本傳輸協議&#xff09;是 Web 的基礎協議&#xff0c;用于客戶端和服務器之間的通信。從 HTTP/1.0 到 HTTP/2.0&#xff0c;HTTP 協議經歷了多次重大改…

apload-lab打靶場

1.提示顯示所以關閉js 上傳<?php phpinfo(); ?>的png形式 抓包&#xff0c;將png改為php 然后放包上傳成功 2.提示說檢查數據類型 抓包 將數據類型改成 image/jpeg 上傳成功 3.提示 可以用phtml&#xff0c;php5&#xff0c;php3 4.先上傳.htaccess文件&#xff0…

金融支付行業技術側重點

1. 合規問題 第三方支付系統的平穩運營&#xff0c;嚴格遵循《非銀行支付機構監督管理條例》的各項條款是基礎與前提&#xff0c;其中第十八條的規定堪稱重中之重&#xff0c;是支付機構必須牢牢把握的關鍵準則。 第十八條明確指出&#xff0c;非銀行支付機構需構建起必要且獨…

Cherry Studio + 火山引擎 構建個人AI智能知識庫

&#x1f349;在信息化時代&#xff0c;個人知識庫的構建對于提高工作效率、知識管理和信息提取尤為重要。尤其是當這些知識庫能結合人工智能來智能化地整理、分類和管理數據時&#xff0c;效果更為顯著。我最近嘗試通過 Cherry Studio 和 火山引擎 來搭建個人智能知識庫&#…

LeetCode 2 - 兩數相加

LeetCode 2 - 兩數相加 是一道經典鏈表操作問題&#xff0c;經常作為面試中基礎題的變體被考察。掌握多種解法及其變體&#xff0c;并熟悉其核心思路和模板代碼&#xff0c;可以快速備戰相關鏈表或大數計算問題。 題目描述 給定兩個非空鏈表&#xff0c;它們代表兩個非負整數&…

Qt之QStateMachine等待

在項目中經常需要等待&#xff0c;我們模擬0-30的數&#xff0c;假如我們其中5&#xff0c; 25的數需要進行等待&#xff0c;等待用戶處理完自己事情后&#xff0c;按下按鈕繼續&#xff0c;找Qt的項目中有一個 QStateMachineqstatemmachine類提供了一個分層有限狀態機。 QSta…

elpis全棧課程學習之elpis-core學習總結

elpis全棧課程學習之elpis-core學習總結 核心原理 elpis-core是全棧框架elpis的服務端內核&#xff0c;主要應用于服務端接口的開發以及頁面的SSR渲染&#xff0c;elpis-core基于約定優于配置的原理&#xff0c;通過一系列的loader來加載對應的文件&#xff0c;大大節約用戶的…

ChatGPT與DeepSeek:開源與閉源的AI模型之爭

目錄 一、模型架構與技術原理 二、性能能力與應用場景 三、用戶體驗與部署靈活性 四、成本與商業模式 五、未來展望與市場影響 六、總結 隨著人工智能技術的飛速發展&#xff0c;ChatGPT和DeepSeek作為兩大領先的AI語言模型&#xff0c;成為了行業內外關注的焦點。它們在…

在筆記本電腦上用DeepSeek搭建個人知識庫

最近DeepSeek爆火&#xff0c;試用DeepSeek的企業和個人越來越多。最常見的應用場景就是知識庫和知識問答。所以本人也試用了一下&#xff0c;在筆記本電腦上部署DeepSeek并使用開源工具搭建一套知識庫&#xff0c;實現完全在本地環境下使用本地文檔搭建個人知識庫。操作過程共…

DeepSeek蒸餾TinyLSTM實操指南

一、硬件準備 階段推薦配置最低要求訓練階段NVIDIA A100 80GB 4RTX 3090 24GB 1量化階段Intel Xeon Gold 6248R CPUi7-12700K + 64GB RAM部署階段Jetson Xavier NX開發套件Raspberry Pi 4B 8GB二、軟件環境搭建 # 創建Python虛擬環境 conda create -n distil python=3.9 conda…

Linux ls 命令

Linux ls&#xff08;英文全拼&#xff1a; list directory contents&#xff09;命令用于顯示指定工作目錄下之內容&#xff08;列出目前工作目錄所含的文件及子目錄)。 語法 ls [-alrtAFR] [name...] 參數 : -a 顯示所有文件及目錄 (. 開頭的隱藏文件也會列出)-d 只列出目…