一、堆的含义

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

二、方法区

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

三、常量池

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

四、直接内存

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

深入了解java虚拟机(JVM) 第三章 内存区域----堆空间的更多相关文章

  1. 深入了解java虚拟机(JVM) 第二章 内存区域---栈空间

    一.栈的含义 用于描述方法执行的动态内存模型,简单来说就是代码中的方法模块.主要用于局部变量表.栈的大小在编译器中就已经分配了空间,在进入一个方法时,这个方法需要栈帧分配多少内存是固定的,运行期间是不 ...

  2. Java虚拟机系列(三)---内存溢出情况及解决方法

    因为Java虚拟机内存有堆内存.方法区.虚拟机栈.本地方法栈和程序计数器五部分组成,其中程序计数器是唯一一块不会发生内存溢出异常的内存区,所以只有四类内存区可能发生内存溢出异常,其中虚拟机栈和本地方法 ...

  3. 深入理解java虚拟机_第三章(上)----->垃圾收集器与内存分配策略

    1.  前言 这一版块内容比较多,分为两篇文章来做笔记.本文讲述上半部分垃圾收集部分;下一篇文章写内存分配部分. 概述 对象已死吗? 引用技术算法 可达性分析算法 再谈引用 两次标记 回收方法区 2. ...

  4. 《深入理解java虚拟机》第三章 垃圾收集器与内存分配策略

    第三章 垃圾收集器与内存分配策略 3.1 概述 哪些内存需要回收 何时回收 如何回收 程序计数器.虚拟机栈.本地方法栈3个区域随线程而生灭. java堆和方法区的内存需要回收.   3.2 对象已死吗 ...

  5. 《深入理解java虚拟机》读书笔记1--java内存区域

    Java内存管理 本文主要介绍Java虚拟机运行时的内存区域是如何划分的.Java对象的创建过程.Java对象的内存布局.Java对象的访问定位 一:运行时区域划分 主要可以分为以下 几个: 程序计数 ...

  6. JAVA虚拟机(一):内存区域

    根据<java虚拟机规范第二版>规定,现阶段的java内存区域总体如下图 其中,方法区和堆是所有线程共享区域. 虚拟机栈,本地方法栈,程序计数器是各线程独占. 概述一下各个区域 先说说线程 ...

  7. 深入了解java虚拟机(JVM) 第一章 内存区域分布情况

    前言: 本文主要是我自己总结的一些技巧,可能对搜到这篇的来观看的朋友有些很难理解,请见谅. 一.JVM的运行时数据区 总共有两个区域: 1.线程共享区:方法区,java堆 2.线程独占区:虚拟机栈,本 ...

  8. 《深入理解JAVA虚拟机》----------第三章 垃圾收集器与内存分配策略,笔记(下)

    1.垃圾收集器 1.1 Serial收集器 这个收集器是一个单线程的收集器,它在进行垃圾收集时,必须暂停其他所有的工作线程. 它是虚拟机运行在Client模式下的默认新生代收集器,它简单而高效. 1. ...

  9. 《深入理解Java虚拟机》-----第2章 Java内存区域与内存溢出异常

    2.1 概述 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又是执行最基础工作的劳动人民——拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任 ...

随机推荐

  1. Java的SSH网站

    1.框架 strusts2 + Hibernate + spring 2.图片 图1-1 网站结构 图1-2 java代码结构 3.源代码 3.1 UserAction.java package co ...

  2. 在Ajax请求中什么时候用GET方式什么时候用POST方式?

    当我们有大量数据要传送时最好的办法是一次发出多个只传递少量信息的Ajax调用时.如果你正用一个Ajax调用发送大量数据,那么最好是结束这种做法,因为这样做并不能节约时间. 因此,需要传送大量数据能成为 ...

  3. Writing Surface Shaders

    [Writing Surface Shaders] Writing shaders that interact with lighting is complex. There are differen ...

  4. 653. Two Sum IV - Input is a BST 二叉树版本

    [抄题]: Given a Binary Search Tree and a target number, return true if there exist two elements in the ...

  5. devcloud

    zone名字:devcloud 外网dns:8.8.8.8 内网dns:10.0.2.3   提供点名称:devcloud   cs bug问题:https://issues.apache.org/j ...

  6. g2o 图优化

    http://www.cnblogs.com/gaoxiang12/p/5244828.html 扩展里面csparse

  7. 查看并解除Oracle锁

    当某个数据库用户在数据库中插入.更新.删除一个表的数据,或者增加一个表的主键时或者表的索引时, 常常会出现ora-00054:resource busy and acquire with nowait ...

  8. Java中的Set,List,Map的区别

    1. 对JAVA的集合的理解是想对于数组 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型) JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 ja ...

  9. jQuary总结2: jQuery选择器

    1  什么是jQuery选择器 获取页面元素,并且把页面元素包装成jQuery对象的方式 2 为什么要学习jQuery选择器 为了更加方便的获取页面上的元素,并且将元素包装起来,使我们编写程序时更加便 ...

  10. 手动安装Chrome截屏控件扩展-Xproer.ScreenCapture(ScreenCapture.crx)

    1.打开扩展面板,在地址栏中输入 chrome://extensions   或通过"扩展程序"菜单打开   2.将ScreenCapture.crx拖拽到此面板中   3.选择添 ...