JVM内存的概念
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,JVM内存的概念javamemory=directmemory(直接内存)+jvmmemory(MaxPermSize+Xmx)1)直接内存跟堆直接内存则是一块由程序本身管理的一块内存空间,它的效率要
千家信息网最后更新 2026年10月31日JVM内存的概念JVM内存的概念
javamemory=directmemory(直接内存)+jvmmemory(MaxPermSize+Xmx)
1)直接内存跟堆直接内存则是一块由程序本身管理的一块内存空间,它的效率要比标准内存池要高,主要用于存放网络通信时数据缓冲和磁盘数据交换时的数据缓冲。DirectMemory容量可以通过-XX:MaxDirectMemorySize指定,如果不指定,则默认为与Java堆的最大值(-Xmx指定)一样。但是,在OSX上的最新版本的JVM,对直接内存的默认大小进行修订,改为"在不指定直接内存大小时默认分配的直接内存大小为64MB",可以通过-XX:MaxMemorySize来显示指定直接内存的大小。2)堆(Heap)和非堆(Non-heap)内存按照官方的说法:"Java虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在Java虚拟机启动时创建的。""在JVM中堆之外的内存称为非堆内存(Non-heapmemory)"。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。
3)栈与堆栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪儿。在Java中一个线程就会相应有一个线程栈与之对应,这点很容易理解,因为不同的线程执行逻辑有所不同,因此需要一个独立的线程栈。而堆则是所有线程共享的。栈因为是运行单位,因此里面存储的信息都是跟当前线程(或程序)相关信息的。包括局部变量、程序运行状态、方法返回值等等;而堆只负责存储对象信息。Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int,short,long,byte,float,double,boolean,char)和对象句柄。线程占用大小在MaxPermSize中进行内存申请和分配
javamemory=directmemory(直接内存)+jvmmemory(MaxPermSize+Xmx)
1)直接内存跟堆直接内存则是一块由程序本身管理的一块内存空间,它的效率要比标准内存池要高,主要用于存放网络通信时数据缓冲和磁盘数据交换时的数据缓冲。DirectMemory容量可以通过-XX:MaxDirectMemorySize指定,如果不指定,则默认为与Java堆的最大值(-Xmx指定)一样。但是,在OSX上的最新版本的JVM,对直接内存的默认大小进行修订,改为"在不指定直接内存大小时默认分配的直接内存大小为64MB",可以通过-XX:MaxMemorySize来显示指定直接内存的大小。2)堆(Heap)和非堆(Non-heap)内存按照官方的说法:"Java虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在Java虚拟机启动时创建的。""在JVM中堆之外的内存称为非堆内存(Non-heapmemory)"。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。
3)栈与堆栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪儿。在Java中一个线程就会相应有一个线程栈与之对应,这点很容易理解,因为不同的线程执行逻辑有所不同,因此需要一个独立的线程栈。而堆则是所有线程共享的。栈因为是运行单位,因此里面存储的信息都是跟当前线程(或程序)相关信息的。包括局部变量、程序运行状态、方法返回值等等;而堆只负责存储对象信息。Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int,short,long,byte,float,double,boolean,char)和对象句柄。线程占用大小在MaxPermSize中进行内存申请和分配
内存
数据
运行
大小
线程
分配
程序
方法
代码
对象
信息
动态
存储
不同
优势
变量
可以通过
垃圾
存期
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司简介
苏州找大状互联网科技有限公司
云信互联网科技有限公司
互联网最新的科技
互联网科技财经
科技互联网技术
易互联网科技有限公司
云电互联网科技
苏州大垚互联网科技
互联网科技大会案例
互联网金融监管科技
广西拼得多互联网科技有限公司
智腾互联网科技有限公司
语蝶互联网科技有限公司
南通创西澳互联网科技有限公司
互联网科技包装股
云鲸互联网络科技有限公司
恒生科技指数 中概互联网
黑龙江互联网科技公司
北京瑞云互联网科技有限公司
河南云网互联网络科技有限公司
新华互联网科技学院
北京互联网科技公司
易通互联网络科技有限公司
北京三清互联网科技
中化能源互联网科技招聘
宁夏科技产业互联网案例
赶超互联网科技 微信多开
上海互联网科技公司ppt
互联网企业和网络科技有限公司