深入了解java虚拟机(JVM) 第三章 内存区域----堆空间

一、堆的含义

    jvm堆的区域主要是用来存放对象的实例,它的空间大小是JVM内存区域中占比重最大的,也是jvm最大的内存管理模块,最重要的是,这个区域是垃圾收集器主要管理的区域,这意味着我们在考虑垃圾回收优化的时候,首先就要想到堆中的区域。

二、方法区

    方法区同样是jvm的内存区域,它和堆一样,都是线程共享区中的内存区域。方法区都主要存放的是jvm加载的类信息、常量、静态变量、及时编译的代码类信息(这里面主要有:1.类型的版本 2字段 3方法 4接口 5常量池)。在方法区中,一般不进行垃圾回收,因为回收效率比较低。

 

 

三、常量池

 

    我们知道,方法区中及时编译的代码中有一个常量池,那什么是常量池呢?一般来说,所有的字符串创建后都会放进常量池,常量池的数据结构是类似于HashSet的一种数据结构,我们知道HashSet的特点是无序、不重复的,那么常量池也是这样。但是,如果某个字符串是通过new关键字创建的,那么这个字符串是在新的堆空间,是不会进入到常量池的,如果要想把这个字符串放进常量池,可以考虑使用intern方法,而用这个方法放进的常量池成为运行时常量池。

四、直接内存

   直接内存是jvm外的内存,它不会受到jvm堆、栈的分配。java中的N I/O就是使用的直接内存。考虑到直接内存,是因为现在的tomcat9默认采用的是N I/O技术,而且直接内存的调控在硬件性能较差时有特别明显的优点,它能够很好的优化程序,使其能够在理论基础上满足硬件性能较差的服务器上。

 

posted @ 2018-11-07 23:04  想去天空的猫  阅读(443)  评论(0编辑  收藏  举报