随笔分类 - 深入理解Java虚拟机笔记
摘要:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 类加载的时机 从加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载,其中验证、准备、解析3个
阅读全文
摘要:线程安全的概念限定于多个线程之间存在共享数据访问这个前提,因为如果一段代码根本不会与其他线程共享数据,那么从线程安全的角度来看,程序是串行执行还是多线程执行对它来说完全没有区别。 线程安全的程度:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。 1.不可变 不可变的对象一定是线程安全的,只要
阅读全文
摘要:内存模型的目标是定义程序中各个变量的访问 规则,即在虚拟机中将变量(包括实例字段,静态字段和构成数组对象的元素,不包括局部变量与方法参数,因为后者是线程私有的)存储到内存和从内存中取出变量这样的底层细节。 Java内存模型规定所有的变量都存储在主内存,每条线程还有自己的工作内存,工作内存保存了被该线
阅读全文
摘要:Serial收集器:是一个单线程的收集器,使用一个CPU或一条收集线程。在进行垃圾收集时,必须暂停其他所有的工作线程,直到收集结束。在用户不可见的情况下,把正常工作的线程全部停止,对很多应用来说难以接受,所以虚拟机开发团队一直寻求消除或减少停顿时间的方法。它是虚拟机运行在Client模式下的默认新生
阅读全文
摘要:对象的内存分配,大部分在堆上分配(少部分经过JIT编译后被拆散为标量类型并间接地栈上分配),对象主要分配在新生代的Eden,如果启动了本地线程分配缓存,将按线程优先在TLAB上分配,少数情况下也可能会分配在老年代中,分配的规则不固定,取决于使用哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数的设置
阅读全文
摘要:1.枚举根节点 可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中。 可达性分析对执行时间的敏感体现在GC停顿上,因为分析工作必须在能确保一致性的快照中进行,即不可以出现在分析过程中对象引用关系还在不断变化,所以这是导致GC进行时必须停顿所
阅读全文
摘要:GC需要完成的3件事情: 1.哪些内存需要回收? 2.什么时候回收? 3.如何回收? 哪些内存需要回收? 对于程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,栈帧随方法的进入和退出执行入栈和出栈的操作。每一个栈帧分配多少内存基本上在类结构确定下来时就已知(运行期JIT编译器会进行一些
阅读全文
摘要:Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域各有的用途,以及创建和销毁的时间,有的区域随虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。 1.程序计数器 一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器,字节码
阅读全文
浙公网安备 33010602011771号