℃江的观后感 -- Java 虚拟机的方法区、直接内存和运行时常量池

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_34750904/article/details/80524940
  • 方法区

    我们知道方法区,当然是和方法有关,Java虚拟机的作用就两个,存储、运算。其实我们叫其方法区,说明和存储东西有关,但是存什么呢?这块存储的是虚拟机加载的类信息,常亮,静态变量和有个就是即使编译后的代码等数据。方法区一般在hotspot被称为永久代。但是其他Java虚拟机不是这样的概念哈。垃圾回收主要在堆中进行,但也会出现在方法区中,而且效率不高,因为你想想常量池一般定义成常亮就会是经常被使用的,所以你再怎么执行垃圾回收也是白搭,故效率低下。

  • 运行时常量池

    这个池子是属于方法区的,这里面都存什么呢?其会存一些编译期生成的各种自变量以及一些符号引用,这些东西都是在类加载以后会存放在方法区中的常量池中进行引用。String a = “111”; String b = “111”; 这个变量 a b 如果放在堆内存中的,那a 一定不等于b,但结果是是a== b。显然不是放在堆中的,除非是new 出来的。在运行时常量池中的变量实际上是HashSet 的数据结构,所以你懂得,存储内容部位重复。其实堆中的new 出来的变量,可以通过intern()方法将其放在运行常量池中。

  • 直接内存

    经常被使用的一块区域,随着NIO的出现而产生的,里面有个通道的概念,从而分配堆外内存,由此使得Java虚拟机不再受限本身内存。NIO所需要的内存就是直接内存,当然了服务器内存也是有上限的,所以也是有可能发生内存溢出的问题的。

猜你喜欢

转载自blog.csdn.net/baidu_34750904/article/details/80524940