JVM
float_yy
键盘敲烂,年薪百万
展开
-
JVM-3 垃圾收集与内存分配
1.判断对象存活的方法 垃圾收集器在进行垃圾回收之前,第一件事就是得确定哪些对象是存活的。1.1 引用计数算法 给对象添加引用计数器,每当有一个地方引用该对象时,计数器就加1,当引用失效时,计数器减1,当一个对象的计数器值为0时,这个对象就不能被使用了。 缺点: 当两个对象相互引用时,会出错。1.2可达性分析算法 以一系列称为"GC Roots"的对象作为起点,...原创 2019-06-18 20:14:55 · 132 阅读 · 0 评论 -
jvm--Class类文件结构
在java中,任何一个Class文件都对应着唯一一个类或接口的定义信息。但是反过来说,类或者接口并不一定都得定义在文件中(类或者接口也可以通过类加载器直接生成)1.简述 Class文件是一组以8位字节为基础单位的二进制流,各个数据项严格按照顺序排列在Class文件中,中间没有任何分隔符。当遇到需要占用8位字节以上空间的数据项时,会按照 高位在前 的方式分割为若干个8位字节进行存储...原创 2019-06-19 20:52:26 · 116 阅读 · 0 评论 -
JVM-2------Java内存区域和对象创建
1、运行时数据区1.1程序计数器 (线程私有) 它是一块很小的内存空间,是当前线程所执行的字节码的行号指示器。它记录了当前线程正在执行的虚拟机字节码指令的地址。字节码指示器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。 每个线程都有一个自己的程序计数器,当在多线程环境下,多个线程进行切换的时候,就是通过程序计数器来保存线程之前的执行状态的。 ...原创 2019-06-18 16:34:50 · 153 阅读 · 0 评论 -
线程安全与锁优化
1. 线程安全 线程安全的代码必须具备一个特征: 代码本身封装了所有必要的正确性手段,使得调用者无须关心多线程的问题,更无须自己采取任何措施来保证多线程的正确调用。 1.1 java中的线程安全 按照安全程度由强到弱排列,java中的共享数据可分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容、线程对立(1)不可变 不可变对象一定是线程安全的,无论是...原创 2019-07-02 11:38:44 · 208 阅读 · 0 评论 -
java虚拟机的类加载机制
一、概述 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和说出实话,最终形成可以被虚拟机直接使用的java类型,这就是 虚拟机的类加载机制。 与其他语言不同,java不是在编译期间进行连接的,java中类型的加载、连接和初始化都是在 程序运行期间 进行的。 二、类加载的时机 类有一个生命周期,类的生命周期如下图所示: 加载、验证、准...原创 2019-06-30 18:20:52 · 171 阅读 · 0 评论 -
虚拟机如何执行字节码
1、概述 虚拟机和物理机是相对应的,这两种机器都具有代码执行能力。物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统上的,而虚拟机的执行引擎是自己实现的,可以自行定制指令集和体系结构。2、运行时栈帧结构 栈帧是虚拟机进行方法调用和方法执行的数据结构,是虚拟机运行时数据区中的虚拟机栈中的栈元素。栈帧的概念结构如下: 在编译期,栈帧中需要多大的局部变量表,多深的操作...原创 2019-06-30 21:22:58 · 710 阅读 · 0 评论 -
java内存模型与线程
1、概述 计算机的运算速度与它的IO速度差距太大,大量时间都花费在磁盘I/O、网络通信或者数据库访问上,为了不让CPU在大部分时间都处于等待IO的状态,应该使用多线程充分发挥CPU的运算能力。 2、内存模型2.1 物理机的内存模型(1) 为了解决CPU运算速度和IO速度差别太大的问题,加入了读写速度更快的高速缓存。(2) 由于每个处理器都有自己的高速缓存,它们共享一个主内存,为...原创 2019-07-01 14:17:10 · 290 阅读 · 0 评论