编程语言
首页 > 编程语言> > Java虚拟机(三)

Java虚拟机(三)

作者:互联网

特性:

public class Demo_4 {

    public static void main(String[] args) {

        String x="ab";

        /**
         * 动态创建放入堆中, new String("a"),new String("b"),new String("ab")
         */

        //["a","b","new String("b")"]
        String s1=new String("a")+new String("b");

        String s2=s1.intern();//将字符串对象尝试放入串池, 如果没有就放入, 有就不放入

        System.out.println(s1==x);// false
        System.out.println(s2==x);// true
    }
}

5.6 StringTable

1.6 中在永久代, 1.8 在堆中

5.7 StringTable 垃圾回收

StringTable 会发生垃圾回收

5.8 StringTable性能调优

-XX:StringTableSize=1000
调整 -XX:StringTableSize=桶的个数

6. 直接内存

6.1 定义

直接内存(Direct Memory)并不是虚拟机运行时数据区的一部分, 也不是<<Java虚拟机规范>>中定义的内存, 而是本机直接内存.

6.2 分配和回收原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

垃圾回收

1. 如何判断对象可以回收

1.1 引用计数法

​ 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器都为0的对象就是不再被使用的,垃圾收集器将回收该对象使用的内存

Java虚拟机并不是通过引用计数算法来判断对象是否存活的

标签:Java,String,对象,虚拟机,串池,内存,字符串,放入
来源: https://blog.csdn.net/OYO_OYO____/article/details/117432761