java虚拟机内存区域理解
- 程序计数器:为了线程切换后能恢复到正确的执行位置,每个线程都有一个独立的程序计数器。(针对java方法,即栈)
- 虚拟机栈:为了虚拟机执行java方法,线程创建时就会创建一个栈帧,存储局部变量表、操作数栈、动态链接等。
- 本地方法栈:为了虚拟机使用到Native法服务。
- 堆:存放对象实例和数组,为对象实例分配内存。可分为新生代和老年代。可以处于物理上不连续的内存空间中,只要逻辑上连续即可。
-Xmx和-Xms控制大小。
- 方法区:存储类信息、常量、静态变量、编译后的代码等数据。也叫“永久代”,可以像Java堆一样管理这部分内存。
1.6以后将字符串常量池放入了堆空间。
- 运行时常量池:存放编译期生成的各种字面量和符号引用。
intern()方法设计的初衷,就是重用String对象.如下测试验证。
String a1 = new String("dog") + new String("Pig");//不会在常量池创建对象。
// String a1 = new String ("dogPig");//在常量池和堆空间创建对象
System.out.println(a1 == a1.intern());//在常量池查找不存在,1.6直接生成。1.7直接生成后,指向堆空间的引用。
System.out.println(a1 == "dogPig");//true
String str2 = "dogPig";//新加的一行代码,其余不变
System.out.println(a1 == str2);//true
内存分配:
桟:存储对象的引用,局部变量的基本数据类型,速度快,自动销毁;
堆:存储new出来的对象,数组,成员变量的基本数据类型;
常量池:属于方法区,存储final的变量和方法;
静态域:属于方法区,存储static的变量和方法;
方法区:存储二进制class字节码。
Demo demo=new Demo();
这一条语句,其实包括了四个动作:
1)右边的“new Demo”,是以Demo类为模板,在堆空间里创建一个Demo对象。
2)末尾的()意味着,在对象创建后,立即调用Demo类的构造函数,对刚生成的对象进行初始化。
3)左边的“Demo demo”创建了一个Demo类引用变量,它存放在栈空间中。也就是用来指向Demo对象的对象引用。
4)“=”操作符使对象引用指向刚创建的那个Demo对象。

java虚拟机内存区域理解的更多相关文章
- 重读《深入理解Java虚拟机》一、Java虚拟机内存区域的划分
一.Java虚拟机内存区域如何划分 1.Java虚拟机内存区域的划分 区域名称 作用(用途) 类型 特点 虚拟机规定异常情况 内存分配与回收 其他说明 1 程序计数器 指示当前正在执行的字节码指令地址 ...
- 一文解析总结Java虚拟机内存区域模型
最近抽空看了一点<深入理解Java虚拟机>,本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下J ...
- 总结Java虚拟机内存区域模型
本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下Java运行时的数据区域,Java虚拟机在执行Java程序 ...
- java虚拟机内存区域的划分以及作用详解
序言 为什么有时候学着学着会突然之间觉得一切度是那么无趣,男的每个月也有那么几天难道?哈哈,不然是什么,我还是要坚持,可以做少一点,但是不能什么度不做.总会过去的,加油 --WH 一.运行时数据区 什 ...
- Java虚拟机内存区域堆(heap)的管理
在上一节中Java 出现内存溢出的定位以及解决方案 中对于Java虚拟机栈以及方法区的内存出现的异常以及处理方式进行了解析,由于Java虚拟机对于堆的管理十分复杂,并且Java虚拟机中最基本的内存区域 ...
- java虚拟机内存区域
java虚拟机运行时数据 程序计数器 是一块较小的内存空间,属于线程私有的内存. 用来记录正在执行的虚拟机字节码指令的地址. 每个线程都需要一个独立的程序计数器,各个线程间的计数器互不影响,独立存储. ...
- 【四】Java虚拟机内存区域初识
一.线程独占区 1.程序计数器 程序计数器是一块处于线程独占区较小的内存空间,它可以看是当前线程所执行的字节码的行号指示器. 如果线程执行的是Java方法,这个计数器记录的是正在执行的虚拟机字节码 ...
- Java虚拟机 内存区域划分
(图片来自https://www.cnblogs.com/whgk/p/6138522.html) 先从线程私有区开始介绍 虚拟机栈 Java虚拟机栈是由一个个栈帧组成的,当一个方法被调用时,代表这个 ...
- 一、java虚拟机内存区域
内存区域 java虚拟机在java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.java虚拟机规范将JVM管理的内存分为:程序计数器.本地方法栈.Java虚拟机栈.方法区.Java堆.如下 ...
随机推荐
- [POJ2443]Set Operation(bitset)
传送门 题意:给出n个集合(n<=1000),每个集合中最多有10000个数,每个数的范围为1~10000,给出q次询问(q<=200000),每次给出两个数u,v判断是否有一个集合中同时 ...
- X230 安装 EI Capitan 10.11.5 驱动篇
/* 键盘又换回了 美蓓亚键盘 缩写nmb 虽然比群光软 但是手感真的出色,貌似x宝没有这个代工厂的键盘(全新,非拆机,而且是标准us阵列,背光版) 有人肯定会问,博主这么纠结键盘干嘛? ...
- mysql免安装版配置使用
mysql免安装版配置使用 1.下载解压 2.配置环境变量 变量MYSQL_HOME = 解压目录 配置变量path 编辑,在后面加上 ;%MYSQL_HOME%\bin 3.修改配置文件 增加或 ...
- 推荐一个 Java 实体映射工具 MapStruct
声明: 1.DO(业务实体对象),DTO(数据传输对象). 2.我的代码中用到了 Lombok ,不了解的可以自行了解一下,了解的忽略这条就好. 在一个成熟的工程中,尤其是现在的分布式系统中,应用与应 ...
- 【SPOJ694&705】Distinct Substrings(后缀数组)
题意:求一个字符串的不相同的子串个数 n<=1000 思路:这是一道论文题 ..]of longint; n,i,m,ans,v,cas:longint; ch:ansistring; proc ...
- php中memcache与memcached的区别 【收藏】
说法一: 两个不同版本的php的memcached的客户端 new memcache是pecl扩展库版本new memcached是libmemcached版本功能差不多 说法二: Mem ...
- Flex嵌入HTML页面
这段时间一直在苦心研究Flex,今天突然想,我们平时都是把swf放到网页中,怎么才能把网页嵌入到Flex中呢?我查了一些资料,然后经过自己的不懈努力,终于搞定. 为了方便,写了个嵌入HTML页面的代理 ...
- mysql针对转义字符的模糊搜索
由于urlencode之后会产生很多'%'符号,这个符号在mysql模糊搜索中代表任意字符,显示会出现问题,例如 name字段经过urlencode之后变成‘%E6%9D%8E%E5%87%A1’,如 ...
- HDU 4738 割边
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- PAT (Advanced Level) 1036. Boys vs Girls (25)
简单题. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> ...