摘要:
Recycler分析 调用来源:PooledByteBuf.java 涉及的知识: AtomicInteger WeakReference ThreadLocal 在DefaultHandle 中调用的recycle只是把需要回收的对象装在一个栈中,那么问题转化为如何这个栈是如何回收的. 那么回收的 阅读全文
摘要:
Java类加载器采用双亲委派模型:1.启动类加载器:这个类加载器负责放在\lib目录中的,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的类库。用户无法直接使用。2.扩展类加载器:这个类加载器由sun.misc.Launcher$AppClassLoader实现。它负责\lib\ext目录中的,或者被java.ext.dirs系统变量所指定的路径中的所有类库。用户可以直... 阅读全文
摘要:
总结一下java.util.Collections类内部的静态方法。checkedCollection(Collection , Class type)checkedList(List , Class type)checkedMap(Map,Class keyType,Class valueType)checkedSet, Class type)checkedSortedMap(SortedMap... 阅读全文
摘要:
1.public final native Class getClass() getClass方法,返回该实例的java.lang.Class类,例如Object obj = new Solution();System.out.print(obj.getClass());输出为class Solution2.public native int hashCode() 返回一个对象的哈希值。 无... 阅读全文
摘要:
Class文件是以8位字节为基础单位的二进制流,各部分中间没有分隔符。遇到8位字节以上的空间数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。 Class文件采用类似C语言的伪结构体来存储,这种伪结构体只有两种数据类型:无符号数和表。无符号数以u1,u2,u4,u8四种,数字代表字节数。可以用来描述数字、索引引用、数量值或者按照UTF-8编码构成字符串值。表是由多个无符号... 阅读全文
摘要:
1.加载加载(loading)阶段是“类加载” (Class Loading)过程的一个阶段,在加载阶段,虚拟机需要完成以下三件事情: 1)通过一个类的全限定名来获取定义此类的二进制字节流。 2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 3)在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口。 虚拟机规范这三... 阅读全文
摘要:
1.类加载的时机类从被加载到虚拟机内存开始,到卸载出内存为止,它整个生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using) 和 卸载(Unloading)七个阶段。 其中验证、准备和解析三个部分统称为连接(Linking)。这七个阶段的发生顺序如下所示。其中加... 阅读全文
摘要:
对象的内存分配,大方向上讲,就是在堆上分配,对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也可能会直接分配在老年代中,分配规则并不是百分百固定,其细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数的设置。1.对象优先在Eden分配 大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间进行... 阅读全文
摘要:
一.对象的创建1.类加载检查 普通对象的创建过程:虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那么必须先执行相应的类加载过程。2.分配内存 分配内存时主要注意两个问题:1.如何分配空间。2.修改指针时如何实现线程安全。 如果内存是规整的,就使用“指针碰撞”的方式,... 阅读全文
摘要:
根据《Java 虚拟机规范(Java SE 7版)》规定,Java虚拟机所管理的内存将会包括一下几个运行时数据区域:1.程序计数器 程序计数器(Program Counter Register) 是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条执行字节码指令。 每条线程都有一个独立的程序... 阅读全文