堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 。
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
在Java语言里堆(heap)和栈(stack)的区别
1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。,堆主要用来存放对象的,栈主要是用来执行程序的。与C++不同Java自动管理栈和堆,程序员不能直接地设置栈或堆。
2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
在补充说一点的就是本地栈 。与栈类似,区别在于栈为虚拟机执行Java方法服务,而本地方法栈为虚拟机使用Native方法服务。
另有方法区详细存储信息如下
1, 类的全限定名
2, 类的超类的全限定名
3, 这个类是类型还是接口
4, 类的访问修饰符
5, 超接口的权限定名的有序类表
6, 该类的常量池,
该类型所使用常量的一个有序集合,包括直接类型和对其他类的,字段和方法的符号引用。
7, 字段信息
字段名,字段类型,字段的修饰符(eg:private String field)
8, 方法信息
方法名,方法的返回信息,方法的修饰符(eg:public void method),如果一个方法不是抽象的和本地的还将保存一下信息:方法的字节码,操作数栈和方法的栈帧中的局部变量的大小,异常表
9, 除了常量以外的所有类变量
类变量是多有类实例共享的,但是没有类实例也可以访问,只与类有关,编译时常量
10, 一个到classLoader的应用
11, 一个到class类的引用
12, 方法表(为了尽可能的提高访问效率,大部分虚拟机对每个装载的费抽象类,都生成一个方法表,把他们当做类型信息放在方法去类。)
方法区同样可以被垃圾回收。
java agent 方法栈
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
下一篇:java 文件分隔符 哪个最好用
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
java面试算法题:如何使用栈去实现队列
java面试算法题:如何使用栈去实现队列
出队 入栈 时间复杂度 -
【Docker技术栈】
Docker 技术栈
Docker -
echo 内容里面的单引号
echo Display a line of text(显示一行文本) 这个命令的作用相当简单明了。传递到 echo 命令的任一个参数都会在(屏幕上)显示出来。小插曲: 每当
echo 内容里面的单引号 双引号 文件名 算术表达式 -
离线安装zabbix agent
1. 什么是 mingw-w64GCC for Windows 64 & 32 bits Mingw-w64 is an advancement of the original mingw.org project, created to support the GCC compiler on Windows systems. It has forked it in 200
离线安装zabbix agent gcc 离线安装 gcc离线安装 iqt安装并生成64位程序的方法 mingw安装