2018年8月7日

摘要: 内存管理 内存分配和内存释放 内存分配由程序完成,内存释放由GC完成 运行时数据区域 (1)程序计数器(program counter register) 一块较小的内存空间 当前线程所执行的字节码的行号指示器,字节码解释器在工作的时候就是通过改变程序计数器的值来选取下一跳要执行的指令 多线程环境下 阅读全文
posted @ 2018-08-07 17:06 dddjp 阅读(913) 评论(0) 推荐(0) 编辑
 
摘要: new 一个对象的时候,会首先判断该类是否已经完成加载 把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型 类的整个生命周期:加载、验证、准备、解析、初始化、使用、卸载 验证、准备、解析又统称为连接 类的加载时机 初始化之前必须加 阅读全文
posted @ 2018-08-07 17:00 dddjp 阅读(387) 评论(0) 推荐(0) 编辑
 
摘要: Student student = new Student(); student.study(); (1)对象的创建 ①检查new指令的参数是否能在常量池中定位到一个类的符号引用,检查符号引用代表的类是否已经加载、解析和初始化 类的加载机制 ②虚拟机为新生对象分配内存,对象所需内存的大小在类加载之后 阅读全文
posted @ 2018-08-07 16:57 dddjp 阅读(1518) 评论(0) 推荐(0) 编辑
 
摘要: (1)高速缓存 使读写速度尽可能快 在多处理器系统中,每个处理器都有自己的高速缓存,而他们又共享统一主存 缓存中数据不一致问题 有一些协议 (2)指令重排序 处理器对输入的代码进行乱序执行优化,处理器在计算之后将乱序执行的结果重组,保证乱序执行的结果和顺序执行的结果是一致的 Java内存模型JMM 阅读全文
posted @ 2018-08-07 12:15 dddjp 阅读(916) 评论(0) 推荐(0) 编辑
 
摘要: 在构造器返回之前,其它线程就持有该对象的引用, 其它线程持有的该对象的引用指向一个尚未构造完成的对象 何时产生? 在构造器中启动一个新的线程或者在构造器中创建匿名类对象并发布时,容易产生this逃逸 使用尚未构造完全的对象的引用,会产生问题 this引用逃逸是一件很危险的事情,其他线程有可能通过这个 阅读全文
posted @ 2018-08-07 12:15 dddjp 阅读(241) 评论(0) 推荐(0) 编辑