JVM有哪些分区?(解释详细 通俗易懂)
JVM的分区可以分为两种:线程私有的内存区和线程共享的内存区
一.JVM中线程私有的内存区:
1.程序计数器:当前线程所执行的字节码行号计数指示器,是线程私有的,即每个线程都有自己的程序计数器,需要注意的是,如果当前JVM执行的是Native代码(即非JAVA代码),那么程序计数器值为空
2.JAVA虚拟机栈:存放栈帧的地方,每个JAVA方法执行的时候会创建一个栈帧,该栈帧保持的是该方法的相关信息(局部变量表等),栈帧随着方法的执行和跳出进栈和出栈,JAVA虚拟机栈是线程私有的,即每个线程都要自己的JAVA虚拟机栈
3.本地方法栈:类似JAVA虚拟机栈,但是JAVA虚拟机栈是为JAVA方法提供服务的,而本地方法栈是为非JAVA方法提供服务的(Native方法)
二.JVM中线程共享的内存区:
1.堆:存放对象实例的地方,从GC(垃圾回收)的角度讲,又分为新生代和老年代,属于线程共享的内存区域
2.方法区:储存已经被JVM加载的类信息,比如常量,静态变量,类的名称,方法信息等等,方法区中还包含运行时常量池和常量池,区别是运行时常量池是动态的,因为JAVA语言并不要求常量一定只能在编译期间生成,运行期间也有可能产生新的常量,这些常量就被放入运行常量池,这里所说的常量包括包装类和String类
个人觉得从是否线程共享的角度看待JVM中的内存区更容易理解!
另外堆和栈的解析可以参考这个:https://www.cnblogs.com/yinbiao/p/8073999.html
JVM有哪些分区?(解释详细 通俗易懂)的更多相关文章
- JVM的内存分区
JVM的内存分区 这篇文章尝试讨论清楚JVM的内存分区情况. 1. JVM的内存和系统内存的关系 下图是对系统内存及JVM内存的大致描绘 对大多数操作系统,内存可以分为物理内存RAM及Sw ...
- JVM分代通俗解释
JVM分代通俗解释 学习了:https://www.cnblogs.com/zgghb/p/6428395.html
- Java虚拟机-JVM各种参数配置大全详细
usr/local/jdk/bin/java -Dresin.home=/usr/local/resin -server -Xms1800M -Xmx1800M -Xmn300M -Xss512K ...
- Linux安装与分区解释
Linux安装过程中最重要的就是对硬盘进行分区: Linux是先建立一个根目录“/”,然后在根目录上建立一系列的空目录,接着把硬盘分区挂载到相应目录上. 在linux系统中至少必须有两个挂载点(磁盘分 ...
- 8.JVM内存分配机制超详细解析
一.对象的加载过程 之前研究过类的加载过程.具体详情可查看文章:https://www.cnblogs.com/ITPower/p/15356099.html 那么,当一个对象被new的时候,是如何加 ...
- mysql分区功能详细介绍,以及实例
一,什么是数据库分区 前段时间写过一篇关于mysql分表的 的文章,下面来说一下什么是数据库分区,以mysql为例.mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下 ...
- VMware手动添加centos7硬盘图文操作及分区超详细
先设置虚拟机 启动的虚拟机,新关机再设置 1.选择指定虚拟机,点击硬盘 2.虚拟机设置,点击左下角“添加” 3.硬件类型选择硬盘,点击下一步 4.添加硬件向导默认就行,下一步 5.选择磁盘,默认选中, ...
- JVM 调优参数解释
典型配置: java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseP ...
- 深入理解JVM:元空间大小详细解析
前言 JVM加载类的时候,需要记录类的元数据,这些数据会保存在一个单独的内存区域内,在Java 7里,这个空间被称为永久代(Permgen),在Java 8里,使用元空间(Metaspace)代替了永 ...
随机推荐
- Python hashlib 模块
使用 md5 加密 import hashlib m = hashlib.md5() m.update('hello world'.encode('utf-8')) # 加密的字符串需要先编码成 ut ...
- Runtime和Process
private void runByshcommand(String command) { try { System.out.println("开始执行命令....."); Pro ...
- 第三次web作业
em是相对长度单位.相对于当前对象内文本的字体尺寸.如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸,最初是指字母M的宽度,故名em.现指的是字符宽度的倍数,用法类似百分比,如:0 ...
- SyntaxError: JSON.parse: bad control character in string literal at line 1 column 16 of the JSON data
JSON.parse转化Json字符串时出现:SyntaxError: JSON.parse: bad control character in string literal at line 1 co ...
- MSCRM中报表开发二:创建基于FetchXML报表
1. 获取FetchXML.因为FetchXML难以撰写,所以我们一般都是使用高级查找来生成FetchXML或者通过其他工具来生成.我这里在商机界面通过高级查找制作了一个新的视图,名称为 商机查询, ...
- Python中列表
names=["Linda","Lily","Lucy","Grace","Paul"] #切片 p ...
- [HDFS_4] HDFS 的 Java 应用开发
0. 说明 在 IDEA下 进行 HDFS 的 Java 应用开发 通过编写代码实现对 HDFS 的增删改查操作 1. 流程 1.1 在项目下新建 Moudle 略 1.2 为 Moudle 添加 M ...
- Nginx日志格式log_format详解
PS:Nginx日志相关指令主要有两条,一条是log_format,用来设置日志格式,另外一条是access_log,用来指定日志文件的存放路径.类型.缓存大小等,一般放在Nginx的默认主配置文件/ ...
- plsql developer如何查询SQL语句执行历史记录(转)
相信很多在plsql developer调试oracle的朋友,经常会遇到在plsql developer执行的某一条SQL语句没有保存,那么我们在plsql developer下如何找到我们执行过的 ...
- syslog与rsyslog的了解与比较
syslog日志收集器: syslog是早期的centos版本的日志收集器,应该是centos5之前的版本. syslog的两个重要的守护进程: 1.syslogd:system.主要以收集系统服务为 ...