在语言层面,创建一个对象通常仅仅是一个new关键字而已。在虚拟机层面,虚拟机遇到一个new指令时,首先回去检查这个指令的参数是能在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已被加载,解析和初始化过。如果没有那么必须先执行类加载操作。 ...
分类:
编程语言 时间:
2019-04-10 21:50:06
阅读次数:
163
JVM(6)访问标志,类索引 上一篇博客讲 "【JVM虚拟机】(5) 深入理解JVM Class中常量池" 我们知道一个class文件正常可以分为7个部分: 魔数与class文件版本 常量池 字段表集合 方法表集合 属性表集合 那么这篇博客主要讲有关 访问标志 和 类索引、父类索引、接口索引 相关的 ...
分类:
其他好文 时间:
2019-04-09 20:19:31
阅读次数:
145
本文会结合虚拟机对引用和对象的不同处理来介绍三大特性的原理。三大特性:继承 封装 多态继承Java中的继承只能单继承,但是可以通过内部类继承其他类来实现多继承。public class Son extends Father{public void go () {System.out.println(... ...
分类:
编程语言 时间:
2019-04-06 19:09:45
阅读次数:
178
1、线程共享内存区:包括堆区、方法区、运行时常量池(三个都有可能跑出内存溢出错误) 堆区 一般用于存储对象实例的内存区,{堆区又分为新生代【Eden,from Survivor,to Survivor】和老年代(oldgen)} 方法区 逻辑上独立,物理上属于堆区(方法区中包含java类的结构信息如 ...
分类:
编程语言 时间:
2019-04-06 17:01:44
阅读次数:
132
string类(常量) ***看见“”“”就是string对象 string是个常量(用final修饰) String ob="obj" 本质是常量 ob地址可以改变 常量池 String a=“abc” 一个对象 String b=new String("abc"); 两个对象 sysout(a= ...
分类:
其他好文 时间:
2019-04-05 18:07:10
阅读次数:
119
第一步:加载 1.获取二进制字节流 2.字节流的静态存储结构转化为方法区的运行时数据结构 3.在java堆里生成一个类对象,作为方法区的访问入口(Class对象) 第二步:验证 1.验证Class文件的标识:魔数 Magic Number 2.验证主副版本号 3.验证常量池(常量类型及数据结构是否符 ...
分类:
其他好文 时间:
2019-04-04 17:27:42
阅读次数:
151
方法区的垃圾回收,即使永生代的垃圾收集:主要回收两部分内容,废弃的常量和无用类、 回收废弃的常量与Java堆中的对象非常类似,以常量池中字面量的回收为例:假如一个字符串"abc"已经进入了常量池中,但是当前系统没有任何一个String对象的是叫做abc的,换句话说就是没有任何STring对象引用常量 ...
分类:
其他好文 时间:
2019-04-01 00:35:22
阅读次数:
175
一、对象创建的过程:当虚拟机遇到一条含有New的指令时,会进行一系列对象创建的操作。 a) 如果含有的话,直接进行下一步 b) 如果常量池中没有这个符号引用的话,说明这个类还没有被定义,回报ClassNotFounddError的异常。 2.检查该符号引用所属的类是否已经被加载到JVM中 a) 如果 ...
分类:
其他好文 时间:
2019-03-31 18:06:46
阅读次数:
132
[toc] String中字符串==分析 new String new String都是在堆上创建字符串对象。 intern() 调用intern()方法时,编译器会将字符串添加到常量池中(StringTable维护),并返回指向该常量的引用。 通过字面量赋值 如:String str = "twn ...
分类:
其他好文 时间:
2019-03-29 10:25:19
阅读次数:
209
Java的基本类型包装类中有6中实现了常量池技术: Byte , Short,Integer,Long ,Characher ,Boolean。另外两种浮点数类型Double和Float没有实现该技术。 六种实现常量池技术的包装类中Byte,Short,Integer,Long,Character这 ...
分类:
其他好文 时间:
2019-03-29 10:23:09
阅读次数:
209