JVM内存的概念
发表于:2024-11-14 作者:千家信息网编辑
千家信息网最后更新 2024年11月14日,JVM内存的概念javamemory=directmemory(直接内存)+jvmmemory(MaxPermSize+Xmx)1)直接内存跟堆直接内存则是一块由程序本身管理的一块内存空间,它的效率要
千家信息网最后更新 2024年11月14日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安全错误
数据库的锁怎样保障安全
平谷区信息化软件开发
显示服务器切换
app 数据库搜索功能
steam避坑换平台服务器游戏
思科网络技术是哪个国家的
网络安全 青春有我
hts-616串口服务器说明书
超市服务器管理系统
网络安全 群主
软件开发出纳
网络安全法基本组成
数据库中属性是
怎么停掉另一个停车场数据库
关于网络安全选择题
丧尸围城4游戏服务器好吗
作战学习数据库三型
个人怎么进入公司的网路服务器
西安有哪些软件开发学校
手机版连接数据库软件
web服务器创建用户注册页面
达梦数据库6160错误
济南vb软件开发
check 数据库
网络技术专业作文450字
山羊基因组数据库
中国互联网科技公司数量
中学生网络安全演讲ppt
网络安全微视频儿歌
中职网络技术面试考什么
数据库304错误_