摘要:
常量池: 即class文件常量池,是class文件的一部分,用于保存编译时确定的数据。 保存的内容如下图: 1 D:\java\test\out\production\test>javap -verbose mainTest 2 Classfile /D:/java/test/out/product 阅读全文
摘要:
JVM除了堆内存、栈内存,还有DirectMemory内存,DirectMemory是java nio引入的。 在JDK1.4中新加入了NIO(New INput/Output)类,引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存 阅读全文
摘要:
方法区与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 使用HotSpot虚拟机的用户,更愿意把方法区称为“永久代”,本质上两者并不等价,仅仅是因为HotSpot虚拟机的设计团队选择把GC分代收集至方法区,或者说用永久代来实 阅读全文
摘要:
如何确定一个堆中的对象是否死去? 两个思路: 1、引用计数法 给每个对象添加一个引用,用来统计指向该对象的引用计数。有引用时就加1,引用失效时就减1。任何时候引用计数为0,该对象就死亡了。可以被当做垃圾处理。但引用计数法有个难以解决的问题:循环引用。 2、可达性分析算法 通过一系列的被称为“GC R 阅读全文
摘要:
1、堆内存线程共享,在虚拟机启动时创建。 2、几乎所有的对象实例都在堆上分配;栈中存放基本数据类型和堆中对象的引用。 GC回收 程序计数器、虚拟机栈、本地方法栈随线程而生,随线程而灭。栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来是就 阅读全文
摘要:
如果当前字节码PC计数器的值已经超出了某个变量的作用域,那这个变量对应的Slot就可以交给其他变量使用。 字节码PC计数器就是程序计数器,程序计数器记录当前线程所执行的字节码的偏移地址。如果这个值超出了某个变量的作用域,那么接下来这个变量就不会再被访问到。 slot的复用会影响到系统的垃圾收集行为: 阅读全文
摘要:
虚拟机栈: 栈元素是栈帧。方法调用,栈帧入栈,反之出栈。 栈帧:一个方法的运行空间。 1、局部变量表:方法定义的局部变量、方法的参数存在该表。 实例方法中有个隐含参数“this”,所以实例方法可以访问该类的实例变量和其他实例方法。 局部变量表中变量的存放顺序:this(如果是实例方法)=>参数(如果 阅读全文
摘要:
程序计数器是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。- - 摘自《深入理解Java虚拟机》 特 阅读全文
摘要:
import java.io.File; public class MainTest { public static void main(String[] args) { String dirname = "D:\\menu"; menu(dirname, 0); } public static void menu(String dir... 阅读全文
摘要:
1、创建数组、设置数组元素、访问数组 一维数组: 多维数组: public Class<?> getComponentType() 返回表示数组组件类型的 Class。如果此类不表示数组类,则此方法返回 null。 组合类型是数组中的元素的类型。例如,int[]数组的组合类型是int.class的C 阅读全文