基礎(chǔ)知識點(diǎn)-JVM

1窘哈、說說你知道的幾種主要的jvm參數(shù)

-server -Xmx3g -Xms3g -XX:MaxPermSize=128m?

-XX:NewRatio=1? eden/old 的比例

-XX:SurvivorRatio=8? s/e的比例?

-XX:+UseParallelGC?

-XX:ParallelGCThreads=8??

-XX:+UseParallelOldGC? 這是JAVA6出現(xiàn)的參數(shù)選項(xiàng)?

-XX:LargePageSizeInBytes=128m 內(nèi)存頁的大小君账, 不可設(shè)置過大慧起, 會影響Perm的大小腕侄。?

-XX:+UseFastAccessorMethods 原始類型的快速優(yōu)化?

-XX:+DisableExplicitGC? 關(guān)閉System.gc()

2按灶、-XX:+UseCompressedOops有什么作用寿桨?

1)允許在64位JVM中內(nèi)存引用地址為32位汉柒,并且訪問接近32GB的堆空間地址惹悄;

2)壓縮64位指針春叫,減少了在GC中花費(fèi)的時間,可能性能略有下降泣港;

3)jdk1.6.0_22默認(rèn)關(guān)閉暂殖,之后的JVM默認(rèn)啟用;

3爷速、Java 類加載器都有哪些央星?

引導(dǎo)類加載器(bootstrap?class?loader):用來加載Java核心庫(jre/lib/rt.jar)。

擴(kuò)展類加載器(extensions?class?loader):用來加載Java擴(kuò)展庫(jre/ext/*.jar)惫东。

系統(tǒng)類加載器(system class?loader):根據(jù)類路徑(CLASSPATH)來加載Java類莉给。

自定義類加載器(custom?class?loader):繼承java.lang.ClassLoader類實(shí)現(xiàn)自己的類加載器毙石。

4、簡單說說你了解的類加載器颓遏,是否實(shí)現(xiàn)過類加載器徐矩?

一個類的生命周期:加載、驗(yàn)證叁幢、準(zhǔn)備滤灯、解析、初始化曼玩、使用鳞骤、卸載。其中加載黍判、驗(yàn)證豫尽、準(zhǔn)備、初始化顷帖、使用美旧、卸載是按順序執(zhí)行的。

在加載階段贬墩,虛擬機(jī)完成三件事:?

1)通過一個類的全限定名類獲取定義此類的二進(jìn)制字節(jié)流榴嗅。

2)將字節(jié)流的所代表的靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化成方法區(qū)運(yùn)行時的數(shù)據(jù)結(jié)構(gòu)。

3)在內(nèi)存中生成一個代表這個類的java.lang.Class的對象陶舞,作為方法區(qū)的這個類各種數(shù)據(jù)訪問的入口嗽测。?

驗(yàn)證是為了確保Class文件字節(jié)流中包含的信息符合當(dāng)前虛擬機(jī)的要求,并且不會危害到虛擬機(jī)本身吊说。?

準(zhǔn)備階段是給類變量賦予初始值的階段论咏。這里的初始值是指變量默認(rèn)的指,并不是用戶賦予的初始值颁井。?

初始化階段是類加載的最后一步厅贪。是給類變量賦予初始值。

類加載器的雙親委派原理:

加載器在加載類時雅宾,先檢查當(dāng)前類有沒有被加載养涮,如果沒有被加載,則首先調(diào)用父類加載器加載眉抬,如果父類加載器加載失敗贯吓,才交給當(dāng)前的類加載器加載。

自定義類加載器

1)如果不想打破雙親委派模型蜀变,只需重寫findClass方法即可

2)如果想打破雙親委派模型悄谐,就重寫整個loadClass方法

5、JVM如何加載字節(jié)碼文件库北?

類加載是將類的.class文件中的二進(jìn)制數(shù)據(jù)讀入到內(nèi)存中爬舰,將其放在運(yùn)行時數(shù)據(jù)區(qū)的方法區(qū)內(nèi)们陆,然后在堆區(qū)創(chuàng)建一個這個類的java.lang.Class對象,用來封裝類在方法區(qū)類的對象情屹。

加載類的方式:

1)從本地系統(tǒng)直接加載

2)通過網(wǎng)絡(luò)下載.class文件

3)從zip坪仇,jar等歸檔文件中加載.class文件

4)從專有數(shù)據(jù)庫中提取.class文件

5)將源文件動態(tài)編譯為.class文件(服務(wù)器)

6、JVM內(nèi)存分哪幾個區(qū)垃你,每個區(qū)的作用是什么椅文?

JVM內(nèi)存區(qū)域分為五個部分:堆,方法區(qū)惜颇,虛擬機(jī)棧皆刺,本地方法棧,程序計數(shù)器官还。

堆: 是Java對象的存儲區(qū)域芹橡,任何用new分配的對象實(shí)例和數(shù)組,都分配在堆上望伦,可用-Xms -Xmx進(jìn)行內(nèi)存控制,從JDK1.7之后煎殷,運(yùn)行時常量池從方法區(qū)移到了堆上屯伞。

方法區(qū):用于存儲被虛擬機(jī)加載的類信息、常量豪直、靜態(tài)變量劣摇、即時編譯器編譯后的代碼等數(shù)據(jù),在JDK1.7及以前稱為永久代弓乙,JDK1.8永久代被移除末融。

虛擬機(jī)棧:虛擬機(jī)棧中執(zhí)行每個方法時,都會創(chuàng)建一個棧幀用于存儲局部變量表暇韧、操作數(shù)棧勾习、動態(tài)鏈接、方法出口等信息懈玻。

本地方法棧:與虛擬機(jī)棧作用相似巧婶,虛擬機(jī)棧為Java方法服務(wù),本地方法棧為Native方法服務(wù)涂乌,執(zhí)行每個本地方法時艺栈,都會創(chuàng)建一個棧幀用于存儲局部變量表、操作數(shù)棧湾盒、動態(tài)鏈接湿右、方法出口等信息。

程序計數(shù)器:指示JVM下一條要執(zhí)行的字節(jié)碼指令罚勾。?

其中方法區(qū)和堆被JVM中多個線程共享毅人,比如類的靜態(tài)常量就存放在方法區(qū)吭狡,供類對象之間共享,虛擬機(jī)棧堰塌、本地方法棧赵刑、pc寄存器是每個線程獨(dú)立擁有的,不與其他線程共享场刑。

7般此、一個對象從創(chuàng)建到銷毀都是怎么在這些部分里存活和轉(zhuǎn)移的?

1)用戶創(chuàng)建一個對象牵现,運(yùn)行時JVM首先會去方法區(qū)尋找該對象的類型信息铐懊,沒有則使用類加載器將字節(jié)碼文件加載至內(nèi)存中的方法區(qū),并將對象的類型信息存放至方法區(qū)瞎疼。?

2)接著JVM在堆中為新的對象實(shí)例分配內(nèi)存空間科乎,這個實(shí)例持有指向方法區(qū)的對象類型信息的引用,引用指的是類型信息在方法區(qū)中的內(nèi)存地址贼急。?

3)在此運(yùn)行的JVM進(jìn)程中茅茂,會首先起一個線程跑該用戶程序,創(chuàng)建線程的同時也創(chuàng)建了一個虛擬機(jī)棧太抓,虛擬機(jī)棧用來跟蹤線程運(yùn)行中的一系列方法調(diào)用過程空闲,每調(diào)用一個方法就會創(chuàng)建并往棧中壓入一個棧幀,棧幀用來存儲方法的參數(shù)走敌、局部變量和運(yùn)算過程的臨時數(shù)據(jù)碴倾。

4)JVM根據(jù)對象引用持有的堆中對象的內(nèi)存地址,定位到堆中的實(shí)例掉丽,由于堆中實(shí)例持有指向方法區(qū)的對象類型信息的引用跌榔,從而獲得方法的字節(jié)碼信息,接著執(zhí)行方法包含的指令捶障。?

5)將對象指向null?

6)JVM GC

8僧须、解釋內(nèi)存中的棧(stack)、堆(heap)和方法區(qū)(method area)的用法残邀?

棧的使用:基本數(shù)據(jù)類型的變量皆辽,一個對象的引用,還有函數(shù)調(diào)用的現(xiàn)場保存都使用椊嬲酰空間驱闷。

堆的使用:通過new關(guān)鍵字和構(gòu)造器創(chuàng)建的對象則放在堆空間,堆是垃圾收集器管理的主要區(qū)域空免。

方法區(qū)的使用:方法區(qū)和堆都是各個線程共享的內(nèi)存區(qū)域空另,用于存儲已經(jīng)被JVM加載的類信息、常量蹋砚、靜態(tài)變量扼菠、JIT編譯器編譯后的代碼等數(shù)據(jù)摄杂;程序中的字面量(literal)如直接書寫100、"hello"和常量都是放在常量池中循榆,常量池是方法區(qū)的一部分析恢。

棧空間操作最快但棧很小秧饮,通常大量的對象都放在堆空間映挂,棧和堆的大小都可以通過JVM的啟動參數(shù)來調(diào)整,椀潦空間不足會引發(fā)StackOverflowError柑船,堆和常量池空間不足則會引發(fā)OutOfMemoryError。

9泼各、JVM中哪個參數(shù)是用來控制線程的棧大邪笆薄?

-Xss參數(shù)

10扣蜻、簡述內(nèi)存分配與回收策略

一逆巍、對象優(yōu)先在Eden分配

大多數(shù)情況下,對象在新生代Eden區(qū)分配莽使。當(dāng)Eden區(qū)沒有足夠空間時蒸苇,JVM將發(fā)起一次Minor GC。

二吮旅、大對象直接分配到老年區(qū)

大對象是指需要大量連續(xù)內(nèi)存空間的對象,典型的就是很長的字符串和數(shù)組味咳。大對象易導(dǎo)致內(nèi)存還有不少空間時提前觸發(fā)垃圾收集以獲取足夠的連續(xù)空間庇勃。

設(shè)置參數(shù):-XX:PretenureSizeThreshold=x。x表示大小的數(shù)值槽驶,大于設(shè)置值的對象直接在老年代分配责嚷。避免在Eden區(qū)和兩個Survivor區(qū)之間發(fā)生大量的內(nèi)存復(fù)制。

三掂铐、長期存活的對象將進(jìn)入老年代

JVM給每個對象定義了一個對象年齡(Age)計數(shù)器罕拂,如果對象在Eden出現(xiàn)并經(jīng)過一次Minor GC后仍存活,并能被Survivor容納的話全陨,將被移動到Survivor中爆班,并且年齡設(shè)為1。對象在Survivor區(qū)每熬過一次Minor GC辱姨,年齡就增加1歲柿菩,當(dāng)它的年齡增加到一定程度(默認(rèn)為15歲)就會進(jìn)入老年代中。對象晉升老年代的年齡閾值可通過參數(shù)-XX:MaxTenuringThreshold設(shè)置雨涛。

四枢舶、動態(tài)對象年齡判定

JVM并不總是要求對象的年齡必須達(dá)到MaxTenuringThreshold才能晉升到老年代懦胞,如果在Survivor區(qū)中相同年齡的對象所有大小之和超過Survivor空間的一半,年齡大于或等于該年齡的對象直接進(jìn)入老年代凉泄,無需等到MaxTenuringThreshold中要求的年齡躏尉。

五、空間分配擔(dān)保

只要老年代的連續(xù)空間大于新生代對象總大小或歷次晉升的平均大小就會Full GC后众,否則Minor GC胀糜。

11、簡述重排序吼具,內(nèi)存屏障僚纷,happen-before,主內(nèi)存拗盒,工作內(nèi)存怖竭?

從源代碼到指令序列的重排序:

1) 編譯器優(yōu)化的重排序:編譯器在不改變單線程語義情況下,重新安排語句的執(zhí)行順序

2) 指令級的并行重排序:現(xiàn)代處理器采用了指令級別的并行技術(shù)將多條指令重疊執(zhí)行

3) 內(nèi)存系統(tǒng)的重排序:由于處理器使用緩存讀/寫緩沖區(qū),使得加載和存儲看上去可能是亂序執(zhí)行陡蝇,對于編譯器痊臭,JMM的編譯器指令重排序規(guī)則會禁止特定類型的編譯器重排列,對于處理器的重排序登夫,JMM的處理器重排序規(guī)則會要求插入特定類型的內(nèi)存屏障广匙,通過內(nèi)存屏障指令來禁止特定類型的處理器重新排序。

happens-before簡介

在JMM中如果一個操作的結(jié)果需要對另一個操作可見恼策,兩個操作間必須存在happens-before關(guān)系鸦致。

1)程序順序規(guī)則:一個線程中的每個操作,happens-before于該線程中的任意后續(xù)操作

2)監(jiān)視器鎖規(guī)則:對一個鎖的解鎖涣楷,happens-before于隨后對這個鎖的加鎖

3)volatile變量規(guī)則: 對于一個volatile域的寫分唾,happens-before于任意后續(xù)對這個volatile域的讀

內(nèi)存屏障:

1)確保指令重排序時不會將其后面的代碼排到內(nèi)存屏障之前

2)確保指令重排序時不會將其前面的代碼排到內(nèi)存屏障之后

3)確保在執(zhí)行到內(nèi)存屏障修飾的指令時前面的代碼全都執(zhí)行完成

4)強(qiáng)制將線程工作內(nèi)存中的值修改到主內(nèi)存中

5)如果是寫操作,則會導(dǎo)致其他線程工作內(nèi)存的緩存數(shù)據(jù)無效

JVM將內(nèi)存分為主內(nèi)存和工作內(nèi)存兩個部分狮斗。

1)所有變量都存儲在主內(nèi)存中绽乔,對所有線程都共享。

2)每條線程都有自己的工作內(nèi)存碳褒,保存的是主存中某些變量的拷貝折砸,線程對變量的所有操作都必須在工作內(nèi)存中進(jìn)行,不能直接讀寫主內(nèi)存中的變量沙峻。

3)線程之間無法直接訪問對方工作內(nèi)存中的變量睦授,線程間變量的傳遞均需通過主內(nèi)存來完成。

線程對內(nèi)存間交互操作:

Lock(鎖定):作用于主內(nèi)存中的變量专酗,把一個變量標(biāo)識為一條線程獨(dú)占的狀態(tài)睹逃。

Read(讀取):作用于主內(nèi)存中的變量,把一個變量的值從主內(nèi)存?zhèn)鬏數(shù)骄€程的工作內(nèi)存中。

Load(加載):作用于工作內(nèi)存中的變量沉填,把從主內(nèi)存中得到的變量值放入工作內(nèi)存的變量副本中疗隶。

Use(使用):作用于工作內(nèi)存中的變量,把工作內(nèi)存中一個變量值傳遞給執(zhí)行引擎翼闹。

Assign(賦值):作用于工作內(nèi)存中的變量斑鼻,把一個從執(zhí)行引擎接收到的值賦給工作內(nèi)存中的變量。

Store(存儲):作用于工作內(nèi)存中的變量猎荠,把工作內(nèi)存中的一個變量值傳到主內(nèi)存中坚弱。

Write(寫入):作用于主內(nèi)存中的變量,把從工作內(nèi)存中得到的變量值放入主內(nèi)存變量中关摇。

Unlock(解鎖):作用于主內(nèi)存中的變量荒叶,把一個處于鎖定狀態(tài)的變量釋放,之后可被其它線程鎖定输虱。

將變量從主內(nèi)存讀取到工作內(nèi)存中些楣,必須順序執(zhí)行read、load宪睹;

將變量從工作內(nèi)存同步回主內(nèi)存中愁茁,必須順序執(zhí)行store、write亭病。

12鹅很、Java中存在內(nèi)存泄漏問題嗎?請舉例說明

內(nèi)存泄露指不再被程序使用的對象或變量一直占據(jù)在內(nèi)存中罪帖。Java使用有向圖的方式進(jìn)行垃圾回收管理促煮,可以消除引用循環(huán)的問題,例如有兩個對象相互引用整袁,只要它們和根進(jìn)程不可達(dá)污茵,那么GC可以回收它們。

java中內(nèi)存泄露的發(fā)生場景

1)程序員可能創(chuàng)建了一個對象葬项,以后一直不使用,這個對象卻一直被引用迹蛤,即這個對象無用但是卻無法被垃圾回收器回收民珍,這就是內(nèi)存泄露,一定要讓程序?qū)⒏鞣N分支情況都完整執(zhí)行到結(jié)束盗飒,然后看某個對象是否被使用過嚷量,如果沒有,才能判定這個對象屬于內(nèi)存泄露逆趣。

2)如果一個外部類實(shí)例對象的方法返回了一個內(nèi)部類的實(shí)例對象蝶溶,這個內(nèi)部類對象被長期引用了,即使那個外部類實(shí)例對象不再被使用,但由于內(nèi)部類持久外部類的實(shí)例對象抖所,這個外部類對象將不會被垃圾回收梨州,也會造成內(nèi)存泄露。

3)當(dāng)一個對象被存進(jìn)HashSet集合中田轧,就不能修改這個對象中的那些參與計算哈希值的字段了暴匠,否則,對象修改后的哈希值與最初存進(jìn)HashSet集合中時的哈希值就不同了傻粘,在這種情況下每窖,即使在contains方法使用該對象的當(dāng)前引用作為參數(shù)去HashSet集合中檢索對象,也將返回找不到對象的結(jié)果弦悉,這也會導(dǎo)致無法從HashSet集合中單獨(dú)刪除當(dāng)前對象窒典,造成內(nèi)存泄露。

4)Hibernate的Session(一級緩存)中的對象屬于持久態(tài)稽莉,垃圾回收器是不會回收這些對象的瀑志,然而這些對象中可能存在無用的垃圾對象,如果不及時關(guān)閉(close)或清空(flush)一級緩存就可能導(dǎo)致內(nèi)存泄露肩祥。

13后室、簡述 Java 中軟引用(SoftReference)、弱引用(WeakReference)和虛引用混狠?

強(qiáng)引用:類似“Object obj = new Object()”這類的引用岸霹,只要強(qiáng)引用還存在,GC永遠(yuǎn)不會回收被引用的對象将饺。

軟引用(SoftReference):描述一些還有用贡避,但并非必需的對象。對于軟引用關(guān)聯(lián)著的對象予弧,在系統(tǒng)將要發(fā)生內(nèi)存溢出異常前刮吧,將會把這些對象列進(jìn)回收范圍并進(jìn)行第二次回收。如果這次回收還是沒有足夠的內(nèi)存掖蛤,才會拋出內(nèi)存溢出異常杀捻。

弱引用(WeakReference):描述非必需對象,強(qiáng)度比軟引用更弱蚓庭,被弱引用關(guān)聯(lián)的對象只能生存到下一次GC前致讥。當(dāng)執(zhí)行GC時,無論當(dāng)前內(nèi)存是否足夠器赞,都會回收掉被弱引用關(guān)聯(lián)的對象垢袱。

虛引用(PhantomReference):也稱幽靈引用或幻影引用,是最弱的一種引用關(guān)系港柜。一個對象是否有虛引用的存在请契,完全不會對其生存時間構(gòu)成影響,也無法通過虛引用來取得一個對象實(shí)例。為一個對象設(shè)置虛引用關(guān)聯(lián)的唯一目的就是希望在這個對象被回收時收到一個系統(tǒng)通知爽锥。

14涌韩、32位JVM和64位JVM的最大堆內(nèi)存分別是多數(shù)?32位和64位的JVM救恨,int類型變量的長度贸辈?

32位JVM堆內(nèi)存理論上可達(dá)到2^32,即4GB肠槽,但實(shí)際會比這個小很多擎淤。

64位JVM堆內(nèi)存理論上可達(dá)到2^64,實(shí)際可指定到100GB秸仙。

32和64位JVM 中嘴拢,int類型變量的長度相同,都是32位或者4個字節(jié)(一個字節(jié)8位)寂纪。

15席吴、怎樣通過Java程序來判斷JVM是32位還是64位?

1)System.getProperty("sun.arch.data.model")

2)控制臺輸入java -version

3)java -d64 -version

16捞蛋、什么情況下會發(fā)生棧內(nèi)存溢出孝冒?

每個方法在執(zhí)行時都會創(chuàng)建一個棧幀,用來存儲局部變量表拟杉、操作數(shù)棧庄涡、動態(tài)鏈接、方法出口等信息搬设。局部變量表又包含基本數(shù)據(jù)類型穴店、對象引用類型(局部變量表編譯器完成,運(yùn)行期間不會變化)拿穴。

棧溢出就是方法執(zhí)行時創(chuàng)建的棧幀超過了棧的深度泣洞。最有可能的就是方法遞歸調(diào)用。

17默色、雙親委派模型是什么球凰?

JVM存在兩種不同的類加載器:一種是啟動類加載器(Bootstrap ClassLoader),使用C++實(shí)現(xiàn)(HotSpot虛擬機(jī)中)腿宰,是虛擬機(jī)自身的一部分弟蚀;另一種就是所有其他的類加載器,獨(dú)立于虛擬機(jī)外部酗失,并且全部繼承自java.lang.ClassLoader。

某個特定的類加載器在接到加載類的請求時昧绣,首先將加載任務(wù)委托給父類加載器规肴,依次遞歸,如果父類加載器可以完成類加載任務(wù),就成功返回拖刃;只有父類加載器無法完成此加載任務(wù)時删壮,才自己去加載。

使用雙親委派模型的好處在于Java類隨著它的類加載器一起具備了一種帶有優(yōu)先級的層次關(guān)系兑牡。例如類java.lang.Object央碟,它存在rt.jar中,無論哪一個類加載器要加載這個類均函,最終都是委派給處于模型最頂端的Bootstrap ClassLoader進(jìn)行加載亿虽,因此Object類在程序的各種類加載器環(huán)境中都是同一個類。

18苞也、jinfo洛勉,jstack,jstat如迟,jmap收毫,jconsole怎么用?

jinfo:觀察運(yùn)行中的JAVA程序運(yùn)行環(huán)境參數(shù)殷勘,參數(shù)包括Java System屬性和JVM命令行參數(shù)此再,java class path等信息。格式:jinfo 進(jìn)程pid

jps:用來顯示本地java進(jìn)程玲销,并顯示進(jìn)程號输拇。格式:jps?或 jps遠(yuǎn)程服務(wù)ip地址(默認(rèn)端口1099)

jstat:一個極強(qiáng)的監(jiān)視VM內(nèi)存工具。用來監(jiān)視JVM的各種堆和非堆的大小及其內(nèi)存使用量痒玩。

jstack:可以觀察到j(luò)vm中當(dāng)前所有線程的運(yùn)行情況和線程當(dāng)前狀態(tài)淳附。格式:jstack 進(jìn)程pid。當(dāng)程序出現(xiàn)死鎖時使用命令:jstack 進(jìn)程ID > jstack.log蠢古,在jstack.log文件中搜索關(guān)鍵字“BLOCKED”奴曙,定位到引起死鎖的地方。

jmap:觀察運(yùn)行中的jvm物理內(nèi)存占用情況(如產(chǎn)生哪些對象及其數(shù)量)草讶。格式:jmap [option] pid

option參數(shù)如下:

-heap:打印jvm heap情況

-histo:打印jvm heap直方圖洽糟。其輸出信息包括類名,對象數(shù)量堕战,對象占用大小坤溃。

-histo:同上,但只打印存活對象的情況

-permstat:打印permanent generation heap情況

使用jmap進(jìn)行heap dump: jmap?-dump:format=b,file=<filename>?<pid>??

打印內(nèi)存統(tǒng)計圖:jmap -histo:live <pid>

jconsole:一個java GUI監(jiān)視工具嘱丢,以圖表化的形式顯示各種數(shù)據(jù)薪介,并可通過遠(yuǎn)程連接監(jiān)視遠(yuǎn)程的服務(wù)器VM。

19越驻、JRE汁政、JDK道偷、JVM 及 JIT 之間有什么不同?

JVM:--java虛擬機(jī)(JVM)

JVM是一種用于計算設(shè)備的規(guī)范记劈,它是一個虛構(gòu)出來的計算機(jī)勺鸦,是通過在實(shí)際的計算機(jī)上仿真模擬各種計算機(jī)功能來實(shí)現(xiàn)的。

Java虛擬機(jī)在執(zhí)行字節(jié)碼時目木,把字節(jié)碼解釋成具體平臺上的機(jī)器指令執(zhí)行换途。

JRE:--java運(yùn)行時環(huán)境(JRE)

JRE是JVM的一個超集,用于執(zhí)行java程序刽射,運(yùn)行時JRE變成了JVM军拟。

JDK:--java開發(fā)工具箱(JDK)

指的是編寫一個java應(yīng)用所需要的所有jar文件和可執(zhí)行文件。jdk把.java文件編譯成為.class字節(jié)碼文件柄冲。JRE是JDK的一部分吻谋。

JIT:--即時編譯器(JIT)

是種特殊的編譯器,它通過有效的把字節(jié)碼變成機(jī)器碼來提高JVM的效率现横。

20漓拾、操作系統(tǒng)中 heap 和 stack 的區(qū)別?

棧是一種線形集合戒祠,其添加和刪除元素的操作應(yīng)在同一端尾部完成骇两。棧后進(jìn)先出。

堆是棧的一個組成元素姜盈。Stack存取速度僅次于寄存器低千,存儲效率比heap高,可共享存儲數(shù)據(jù)馏颂。

21示血、虛擬內(nèi)存是什么?

虛擬內(nèi)存是WIN系統(tǒng)用來管理內(nèi)存的一種方法救拉,就是把內(nèi)存中的信息分出去一部分存在硬盤上难审。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市亿絮,隨后出現(xiàn)的幾起案子告喊,更是在濱河造成了極大的恐慌酱酬,老刑警劉巖狗准,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異巾兆,居然都是意外死亡蒂萎,警方通過查閱死者的電腦和手機(jī)秆吵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來五慈,“玉大人纳寂,你說我怎么就攤上這事实苞。” “怎么了烈疚?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長聪轿。 經(jīng)常有香客問我爷肝,道長,這世上最難降的妖魔是什么陆错? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任灯抛,我火速辦了婚禮,結(jié)果婚禮上音瓷,老公的妹妹穿的比我還像新娘对嚼。我一直安慰自己,他們只是感情好绳慎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布纵竖。 她就那樣靜靜地躺著,像睡著了一般杏愤。 火紅的嫁衣襯著肌膚如雪靡砌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天珊楼,我揣著相機(jī)與錄音通殃,去河邊找鬼。 笑死厕宗,一個胖子當(dāng)著我的面吹牛画舌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播已慢,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼曲聂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蛇受?” 一聲冷哼從身側(cè)響起句葵,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎兢仰,沒想到半個月后乍丈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡把将,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年轻专,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片察蹲。...
    茶點(diǎn)故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡请垛,死狀恐怖催训,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宗收,我是刑警寧澤漫拭,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站混稽,受9級特大地震影響采驻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匈勋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一礼旅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洽洁,春花似錦痘系、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至璃俗,卻和暖如春奴璃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背城豁。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工苟穆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唱星。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓雳旅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親间聊。 傳聞我的和親對象是個殘疾皇子攒盈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評論 2 349

推薦閱讀更多精彩內(nèi)容

  • Java8張圖 11、字符串不變性 12哎榴、equals()方法型豁、hashCode()方法的區(qū)別 13、...
    Miley_MOJIE閱讀 3,696評論 0 11
  • 整理來自互聯(lián)網(wǎng) 1尚蝌,JDK:Java Development Kit迎变,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工具...
    Ncompass閱讀 1,537評論 0 6
  • 一:java概述:1飘言,JDK:Java Development Kit衣形,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,635評論 0 11
  • 這篇文章是我之前翻閱了不少的書籍以及從網(wǎng)絡(luò)上收集的一些資料的整理姿鸿,因此不免有一些不準(zhǔn)確的地方谆吴,同時不同JDK版本的...
    高廣超閱讀 15,565評論 3 83
  • 所有知識點(diǎn)已整理成app app下載地址 J2EE 部分: 1.Switch能否用string做參數(shù)倒源? 在 Jav...
    侯蛋蛋_閱讀 2,412評論 1 4