JVM第一章
1.原碼、反碼、補(bǔ)碼怎么表示?
二進(jìn)制的第一位為符號位,0為正數(shù),1為負(fù)數(shù)
原碼:正數(shù)的原碼符號位為0,負(fù)數(shù)的原碼符號位為1
5 的原碼 為 00000000 00000000 00000000 00000101
-5 的原碼為 10000000 00000000 00000000 00000101
反碼:符號位不變、其他位取反
5的反碼 是:01111111 11111111 11111111 11111010
-5 的反碼是 11111111 11111111 11111111 11111010
補(bǔ)碼:正數(shù)的補(bǔ)碼是原碼本身,負(fù)數(shù)的補(bǔ)碼是反碼+1
5的補(bǔ)碼 :01111111 11111111 11111111 11111010
-5 的補(bǔ)碼:11111111 11111111 11111111 11111011
2.計(jì)算機(jī)中用什么來表示整數(shù)?
補(bǔ)碼
3.jvm中使用補(bǔ)碼表示整數(shù)的好處是什么?
1:統(tǒng)一了整數(shù)0 的表示方式,0是正數(shù)時(shí)是二進(jìn)制的32個0,負(fù)數(shù)用補(bǔ)碼表示也是32個0
2:方便加減運(yùn)算,可以直接用補(bǔ)碼做加減法
4.基本數(shù)據(jù)類型的長度?
byte 1字節(jié) 8bit
short、char 2字節(jié) 16bit
int、float 4字節(jié) 32bit
long、double 8字節(jié) 64bit
boolean 如果表示變量用4字節(jié)、如果是數(shù)組,那么每個元素就是1字節(jié)
JVM第二章
5.JVM內(nèi)包括那幾部分?
類加載子系統(tǒng)、java棧、方法區(qū)Java堆、本地方法棧、PC寄存器、執(zhí)行引擎、垃圾回收系統(tǒng)、直接內(nèi)存
6.本地方法棧和java棧的區(qū)別?
本地方法棧用于本地函數(shù)的調(diào)用,java棧用于java函數(shù)的調(diào)用
7.PC寄存器的作用是什么?
PC寄存器是每個線程的私有空間,jvm為每個線程創(chuàng)建一個PC寄存器,在任意時(shí)刻,一個線程總是在執(zhí)行一個方法,如果當(dāng)前線程執(zhí)行的線程不是本地方法,PC寄存器會存儲它的指令,如果是本地方法,則存儲undefined。
8.java堆的結(jié)構(gòu)?
Java堆分為新生代和老年代,其中新生代放新生對象和年齡不大的對象,老年代則放年老的對象。新生代有可能分為eden區(qū)、S0區(qū)、S1區(qū),也是From區(qū)和To區(qū),是大小相等可以互換角色的內(nèi)存空間。對象首先分配在Eden區(qū),在一次新生代回收后,如果對象存活,則進(jìn)入S0或者S1區(qū),之后,沒經(jīng)過一次新生代回收,對象如果存活,年齡就會加1.當(dāng)對象的年齡達(dá)到一定條件后,就會被認(rèn)為是老年對象,從而進(jìn)入老年代。
9.操作數(shù)棧的作用?
保存計(jì)算過程的中間結(jié)果
10.方法區(qū)(永久區(qū))的作用?
保存類的信息、字段、方法、常量池等,在java8中已經(jīng)被移出,用元數(shù)據(jù)區(qū)替代,是堆外的直接內(nèi)存,如果沒有配置的話,默認(rèn)會用完機(jī)器的全部內(nèi)存。