图解方法执行流程 Short.MAX_VALUE存在哪? int a = 10 比较小的数(short范围内)跟字节码指令存在一起int b = Short.MAX_VALUE + 1 比short最大值还大的数存在常量池中 这样一段Java代码被虚拟机执行时,发生了什么? 类加载器将main方法所在的类的字节码读入内存 .class中常量池被放入运行时常量(方法区的一个部分)池这个区域 2021-03-18 Java虚拟机 Java Java虚拟机
Java内存模型背诵版 Java虚拟机规范中试图定义一种Java内存模型(JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。 主内存与工作内存Java内存模型的主要目标是定义程序中各个变量的访问规则 原子性synchrnizedsynchronized 既保证了原子性又保证了可见性 可见性volatilevolatile修饰保证变量不同线程的可见性,强制读主存 2021-03-18 Java虚拟机 Java Java虚拟机
synchronized sychronized代码块如何保证加锁解锁的成对出现?对如下这样一个简单的代码用javap查看的bytecode信息 public class public class Demo { public static void main(String[] args) { Object lock = new Object(); synchroniz 2021-03-18 Java虚拟机 Java Java虚拟机
三、类文件结构 1.类文件结构1.1魔数1.2版本1.3常量池1.常量池是一张表,容量计数(只有这个是)从1开始,第0项表示不引用任何一个常量池项目。 eg: 2.常量池主要存放两大类常量:字面量(Literal)和符号引用. 字面量:Java中的字符串,final修饰的常量值, 符号引用: ①类和接口的全限定名; ②字段的名称和描述符 ③方法的名称和描述符 注: 字段的描述符是个UTF8 2021-03-18 Java虚拟机 Java Java虚拟机
二、垃圾回收 垃圾回收1. 如何判断对象可以回收/是垃圾1.1 引用计数法 早期python虚拟机使用这种方法 存在2个互相引用,进而不能释放的问题 Java虚拟机没有采用这种方法1.2 可达性分析算法 Java 虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象 扫描堆中的对象,看是否能够沿着 GC Root对象 为起点的引用链找到该对象,找不到,表示可以 回收 哪些对象可以作为 GC Root(是一系 2021-03-18 Java虚拟机 Java Java虚拟机
四、内存模型 内存模型[TOC] 1. java 内存模型很多人将【java 内存结构】与【java 内存模型】傻傻分不清,【java 内存模型】是 Java Memory Model(JMM)的意思。 关于它的权威解释,请参考 https://download.oracle.com/otn-pub/jcp/memory_model-1.0-pfdspec-oth-JSpec/memory_model-1_0- 2021-03-18 Java虚拟机 Java Java虚拟机
编译期处理-语法糖 [TOC] 编译期处理所谓的 语法糖 ,其实就是指 java 编译器把 *.java 源码编译为 *.class 字节码的过程中,自动生成 和转换的一些代码,主要是为了减轻程序员的负担,算是 java 编译器给我们的一个额外福利(给糖吃嘛) 注意,以下代码的分析,借助了 javap 工具,idea 的反编译功能,idea 插件 jclasslib 等工具。另外, 编译器转换的结果直接就是 clas 2021-03-18 Java虚拟机 Java Java虚拟机
面试题 1.JVM的启动过程?1.配置JVM装载环境JVM.dll(libjvm.dylib)文件的查找和加载 2、解析虚拟机参数3、设置线程栈大小4、执行Java main方法4.1.新建JVM实例 调用JVM.dll函数JNI_CreateJavaVM,新建一个JVM实例 4.2.加载主类的class 1、调用GetMainClassName方法找到META-INF/MANIFEST. 2021-03-18 Java虚拟机 Java Java虚拟机
stringtable字符串常量池 以上弄懂,下面这些就能搞明白啦 String s1 = String s1 = "a"; String s2 = "b"; String s3 = "a" + "b"; String s4 = s1 + s2; String s5 = "ab"; String s6 = s4.intern(); // System.out.println(s3 == s4); //false Sys 2021-03-18 Java虚拟机 Java Java虚拟机
ArrayList ArrayList 1.Clonable接口 浅拷贝只复制的对象的引用,无法做到完全复制 深拷贝如何实现:不简单复制引用,复制引用类型对象的新引用 Arrays.asList(T…t) 返回的List不支持add操作Arrays.asList(T…t) 返回的List不支持add操作,因为它里面的ArrayList是Arrays的内部类 ,父类的add方法直接抛出了异常 Unsupported 2021-03-18 集合框架 Java 集合框架
Collection public interface Collection<E> extends Iterable<public interface Collection<E> extends Iterable<E> Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素 2021-03-18 集合框架 Java 集合框架
ConcurrentHashMap 1.71.数据结构:segment数组 + HashEntry数组 + 链表 2.初始化:无参的构造函数会初始化一个大小16的Segment数组,并new一个Segment其他都是null 3.put 先计算segment的位置,null的话 用的cas保证只有一个线程 new Segment 赋值进去 再用trylock获取锁(segment继承了Reentrantlock) ,没有获取到的线程 2021-03-18 集合框架 Java 集合框架