随笔分类 - Java虚拟机
摘要:67、JVM内存模型线程独占:栈,本地方法栈,程序计数器线程共享:堆,方法区 68、栈又称方法栈,线程私有的,线程执行方法是都会创建一个栈阵,用来存储局部变量表,操作栈,动态链接,方法出口等信息.调用方法时执行入栈,方法返回式执行出栈. 69、本地方法栈与栈类似,也是用来保存执行方法的信息.执行Ja
阅读全文
摘要:29、标记清除算法( Mark-Sweep)最基础的垃圾回收算法,分为两个阶段,标注和清除。标记阶段标记出所有需要回收的对象,清除阶段回收被标记的对象所占用的空间。如图 30、复制算法(copying)为了解决 Mark-Sweep 算法内存碎片化的缺陷而被提出的算法。按内存容量将内存划分为等大小的
阅读全文
摘要:1、java中会出现内存泄漏吗?前简述 会。自己实现堆载的数据结构时有可能会出现的内存泄露,可参考看effective java 2、64位JVM中,int的长度是多数? java中,int类型变量的长度是一个固定值,与平台无关,都是32位,意思是说,在32位和64位的java虚拟机中,int类型的
阅读全文
摘要:Java语言中的线程安全 按照线程安全的“安全程度”由强至弱来排序,可以将Java语言中各种操作共享的数据分为以下五类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。 不可变 不可变的对象一定是线程安全的,无论是对象的方法实现还是方法的调用者,都不需要再进行任何线程安全保障措施。 Java
阅读全文
摘要:Java内存模型 Java 内存模型指的是 JMM Java 语言为了保证并发编程中可以满足原子性、可见性及有序性,于是推出了一个概念就是 JMM 内存模型。 JMM 内存模型,目的是为了在多线程条件下,使用共享内存进行数据通信时,通过对多线程程序读操作、写操作行为规范约束,来尽量避免多次内存数据读
阅读全文
摘要:局部变量表 局部变量表(Local Variables Table)是一组变量值的存储空间,用于存放方法参数和方法内部定义的局部变量。在Java程序被编译为Class文件时,就在方法的Code属性的max_locals数据项中确定了该方法所需分配的局部变量表的最大容量。 局部变量表的容量以变量槽(V
阅读全文
摘要:类加载的时机 一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七
阅读全文
摘要:如何判断对象已死? JVM 中判断对象是否已经死亡的算法主要有 2 种:引用计数法、可达性分析法。 引用计数法 如果一个对象被其他变量所引用,则让该对象的引用计数+1,如果该对象被引用2次则其引用计数为2,依次类推。 某个变量不再引用该对象,则让该对象的引用计数-1,当该对象的引用计数变为0时,则表
阅读全文
摘要:对象的创建过程 在 Java 语言层面,创建对象一般是借助 new 关键字去实现: User user = new User(); 而在虚拟机中,对象的创建过程如下: 当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用, 并且检查这个符号引用
阅读全文
摘要:程序计数器(线程私有),是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。 它的核心作用就是:用于存储下一条所要执行的 JVM 指令的内存地址。 每一条二进制字节码(JVM指令) 通过 解释器 转换成 机器码 然后 就可以被 CPU 执行了!当 解释器 将一条jvm 指令转换成
阅读全文