Java面试上机编程题 java面试上机操作_赋值

Java面试上机编程题 java面试上机操作_java_02

Java面试上机编程题 java面试上机操作_Java面试上机编程题_03

jkd的组成结构

 

Java面试上机编程题 java面试上机操作_开发语言_04

 java的跨平台是通过jvm虚拟机实现的

Java面试上机编程题 java面试上机操作_Java面试上机编程题_05

 java代码执行流程

首先java代码通过javac编译成.class文件,.class文件进入类装载子系统,装载进入运行时数据区,通过字节码执行引擎来执行运行时数据区中的数据。

Java面试上机编程题 java面试上机操作_jvm_06

堆:主要存储new出来的对象

栈:主要存储变量,这里java中的栈和数据结构的栈的概念是一样的,符合先进后出的概念。如下如所示

Java面试上机编程题 java面试上机操作_java_07

进栈图如下

main方法先进栈最后出栈。

Java面试上机编程题 java面试上机操作_赋值_08

每个栈帧中都会有四个存储空间

局部变量表:存储未赋值的变量,或者已经赋值的变量。该局部变量表中的变量和堆中的对象是有关系的,局部变量表中的变量存储的是该对象在堆中的内存地址。

操作数栈:该数值在未给局部变量表中的变量赋值时,存储在该操作数栈中;赋值后给局部变量表后,该数值存储到局部变量表中,操作数栈中的该数值移除。此外数值的运行也是在该区域中进行,运算结束后赋值给局部变量表。也就是说操作栈就是操作数进行数据运算的临时存储空间。

动态链接:把符号引用转变成字符引用,该字符就是该符号在方法区的直接内存地址。

方法出口:执行程序语句后返回的线程保存到该区域。

Java面试上机编程题 java面试上机操作_jvm_09

程序计数器:

用来存放jvm正在运行代码的行号(也就是这行代码在该方法区中的内存地址)

当程序开始执行时,jvm不仅会给程序分配一个栈内存,还会给每一个栈分配一个程序计数器的内存。

方法区:

常量:

Java面试上机编程题 java面试上机操作_jvm_10

静态变量:

Java面试上机编程题 java面试上机操作_赋值_11

该静态变量user和堆中的user的关系:该静态变量存放的是user在堆中的内存地址。

类元信息:

本地方法栈:

当线程运行代码时运行了本地方法,从本地方法栈中画出一部分空间给该线程去用

Java面试上机编程题 java面试上机操作_开发语言_12

堆:

jvm的大部分调优都是调的堆

Java面试上机编程题 java面试上机操作_赋值_13

 该算法标记的非垃圾对象会被传入survivor区,其余的垃圾对象会继续存在eden区域,直到被GC清除。标记的非垃圾对象会不断地在survivor之间传递,直到传递到15次还没有被清除时会传递到老年代。

Java面试上机编程题 java面试上机操作_赋值_14

 

Java面试上机编程题 java面试上机操作_Java面试上机编程题_15

Java面试上机编程题 java面试上机操作_java_16

jre中的lib目录解释.class文件,翻译成机器码,映射到操作系统。

Java面试上机编程题 java面试上机操作_Java面试上机编程题_17

 

Java面试上机编程题 java面试上机操作_Java面试上机编程题_18

==对比的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址。

equals主要对比的是两个字符串的内容。

Java面试上机编程题 java面试上机操作_jvm_19

Java面试上机编程题 java面试上机操作_Java面试上机编程题_20

Java面试上机编程题 java面试上机操作_赋值_21

Java面试上机编程题 java面试上机操作_jvm_22

Java面试上机编程题 java面试上机操作_Java面试上机编程题_23

如上图所示,一个数组可以通过它的数组下标赋值,但不能重新给这个数组赋值。

一个引用变量可以给它的属性赋值,但不可以给该引用变量赋值。

Java面试上机编程题 java面试上机操作_Java面试上机编程题_24

Java面试上机编程题 java面试上机操作_java_25

Java面试上机编程题 java面试上机操作_jvm_26

 

Java面试上机编程题 java面试上机操作_java_27

 

Java面试上机编程题 java面试上机操作_开发语言_28

Java面试上机编程题 java面试上机操作_赋值_29

Java面试上机编程题 java面试上机操作_赋值_30

Java面试上机编程题 java面试上机操作_赋值_31

初级中级程序员答出如下3点就可以了 ,后面的是中高级,高级程序员需要回答的。

Java面试上机编程题 java面试上机操作_jvm_32

 

Java面试上机编程题 java面试上机操作_开发语言_33

Java面试上机编程题 java面试上机操作_java_34

Java面试上机编程题 java面试上机操作_Java面试上机编程题_35

Java面试上机编程题 java面试上机操作_jvm_36

Java面试上机编程题 java面试上机操作_Java面试上机编程题_37

Java面试上机编程题 java面试上机操作_java_38

Java面试上机编程题 java面试上机操作_Java面试上机编程题_39

Java面试上机编程题 java面试上机操作_java_40

Java面试上机编程题 java面试上机操作_赋值_41

Java面试上机编程题 java面试上机操作_Java面试上机编程题_42

Java面试上机编程题 java面试上机操作_java_43

Java面试上机编程题 java面试上机操作_jvm_44

Java面试上机编程题 java面试上机操作_Java面试上机编程题_45

 

Java面试上机编程题 java面试上机操作_赋值_46

Java面试上机编程题 java面试上机操作_java_47

Java面试上机编程题 java面试上机操作_赋值_48

Java面试上机编程题 java面试上机操作_开发语言_49

Java面试上机编程题 java面试上机操作_开发语言_50

Java面试上机编程题 java面试上机操作_jvm_51

Java面试上机编程题 java面试上机操作_开发语言_52

Java面试上机编程题 java面试上机操作_开发语言_53

Java面试上机编程题 java面试上机操作_赋值_54

Java面试上机编程题 java面试上机操作_赋值_55

Java面试上机编程题 java面试上机操作_开发语言_56

 

Java面试上机编程题 java面试上机操作_开发语言_57

Java面试上机编程题 java面试上机操作_java_58