JVM对象池

       常量池(constant_pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。jvm规范中,每个类型都有自己的常量池。

       Java中八种基本类型的包装类的大部分都实现了常量池技术,它们是Byte、Short、Integer、Long、Character、Boolean,另外两种浮点数类型的包装类(Float、Double)则没有实现。并且Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值在-128到127时才可使用对象池。另外String类 也实现了常量池技术。       

       对于final修饰的变量,它在编译时被解析为常量值的一个本地拷贝存储到自己的常量池中或嵌入到它的字节码流中。

       在JDK5.0里,JVM在启动的时候会实例化9个对象池,这9个对象池分别用来存储8种基本数据类型的包装类对象和String对象。当我们直接用8种基本类型的包装类的对象或用双引号括起来一个字符串时,JVM就要在其对象池里面去找是否有一个相同的对象,如果有,就直接从对象池中拿这个现成的对象,如果没有,就在对象池里面创建一个新的对象。

猜你喜欢

转载自guwq2014.iteye.com/blog/2218088