jvm(二):内存管理
jvm内存区域总体分为5大块:方法区,java堆,虚拟机栈,本地方法栈,程序计数器,按照线程来分的话又分为线程共享区和线程独占区

程序计数器:
a、程序计数器是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器
b、此区域是唯一一个在java虚拟机规范中没有任何outofmemoryerror情况的区域
c、如果线程执行的是java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址,如果正在执行的是native方法(即本地方法栈服务的方法),这个计数器的值为undefined
本地方法栈:
a、本地方法栈为虚拟机执行native方法服务(虚拟机栈为虚拟机执行java方法服务)
虚拟机栈:
a、虚拟机栈描述的是java方法执行的动态内存模型
b、栈帧,每个方法执行都会创建一个栈帧,伴随着方法从创建到执行完成,用于存储局部变量表(存放编译期可知的各种基本数据类型,引用类型,returnaddress类型,局部变量表的内存空间在编译期间完成分配,当进入一个方法,这个方法需要在帧分配多少内存是固定的,在方法运行期间不会改变局部变量表的大小),操作数栈,动态链接,方法出口等。
c、可能出现StackOverflowError、OutOfMemory等异常
java堆:
a、存放对象实例
b、垃圾收集器管理的主要区域
c、堆被划分为两个不同的区域:新生代、老年代,新生代又被划分为三个区域:Eden、From Survivor、To Survivor
d、堆大小可通过参数-Xms、-Xmx来指定
e、会抛出OutOfMemory异常
方法区:
a、存储运行时常量池,已被虚拟机加载的类信息(类的版本,字段,方法,接口),常量(储存编译器生成的各种字面量和符号引用),静态变量、即时编译器编译后的代码等数据。
b、方法区中很少进行垃圾回收,但是会执行垃圾回收,回收效率比较低,如对常量池的回收,对象类型的卸载等。
c、会抛出异常OutOfMemoryError
注意:
如果Strng s1 = "abc" String s2 ="abc" s1==s2 输出为true

因为,定义s1的时候,在堆中创建对象,并记录在方法区的运行时常量池的StringTable表中,再定义s2的时候发现StringTable中已经记录了这个对象,就不在堆中创建新的对象了,s2会指向第一个abc,而不是图中的第二个
如果String s3 =new String("abc") ,则是s1==s3为false 直接在堆中开辟一块空间,而不再去考虑常量池的问题。如果,s1==s3.intern() 则返回为true,intern()方法会将s3的“abc”移动到运行时常量池中去(即产生一个运行时常量),但常量池中已经有“abc”所以相等。
注意,还有直接内存(主要是nio使用)的存在,其不受虚拟机内存的制约,但是受到物理内存的制约。
jvm(二):内存管理的更多相关文章
- JVM的内存管理机制-转载
JVM的内存管理机制 一.JVM的内存区域 对于C.C++程序员来说,在内存管理领域,他们既拥有每一个对象的"所有权",又担负着每一个对象生命开始到终结的维护责任. 对Java程序 ...
- jvm的内存管理【转】
[转]JVM内存管理 这些日子一直在研究jvm内存管理的东西,网上的知识很多,总结一下,能沉淀下来的就是自己的! 首先,刚学java的时候就知道java类文件是以 .java为后缀的文件,经过java ...
- Android笔记--Bitmap(二)内存管理
Bitmap(二) 内存管理 1.使用内存缓存保证流畅性 这种使用方式在ListView等这种滚动条的展示方式中使用最为广泛, 使用内存缓存 内存缓存位图可以提供最快的展示.但代价就是占用一定的内存空 ...
- JVM的内存管理机制
在做Java开发的时候常用的JVM内存管理有两种,一种是堆内存,一种是栈内存.堆内存主要用来存储程序在运行时创建或实例化的对象与变量,例如:我们通过new MyClass()创建的类MyClass的对 ...
- JVM自动内存管理学习笔记
对于使用 C.C++ 的程序员来说,在内存管理领域,他们既是拥有最高权力的皇帝又是从事最基础工作的劳动人民——拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任.对于 Java 程 ...
- JVM自动内存管理机制——Java内存区域(上)
一.JVM运行时数据区域概述 Java相比较于C/C++的一个特点就是,在虚拟机自动内存管理机制的帮助下,我们不需要为每一个操作都写像C/C++一样的delete/free代码,所以也不容易出现内存泄 ...
- JVM自动内存管理机制--读这篇就GO了
之前看过JVM的相关知识,当时没有留下任何学习成果物,有些遗憾.这次重新复习了下,并通过博客来做下笔记(只能记录一部分,因为写博客真的很花时间),也给其他同行一些知识分享. Java自动内存管理机制包 ...
- Spark(二): 内存管理
Spark 作为一个以擅长内存计算为优势的计算引擎,内存管理方案是其非常重要的模块: Spark的内存可以大体归为两类:execution和storage,前者包括shuffles.joins.sor ...
- JVM自动内存管理-Java内存区域与内存溢出异常
摘要: JVM内存的划分,导致内存溢出异常的可能区域. 1. JVM运行时内存区域 JVM在执行Java程序的过程中会把它所管理的内存划分为以下几个区域: 1.1 程序计数器 程序计数器是一块较小的内 ...
- JVM自动内存管理机制——Java内存区域(下)
一.虚拟机参数配置 在上一篇<Java自动内存管理机制——Java内存区域(上)>中介绍了有关的基础知识,这一篇主要是通过一些示例来了解有关虚拟机参数的配置. 1.Java堆参数设置 a) ...
随机推荐
- 深入理解PHP之require/include顺序
深入理解PHP之require/include顺序 作者: Laruence( ) 本文地址: http://www.laruence.com/2010/05/04/1450.html 转载请注明 ...
- 一次“峰回路转”的troubleshooting经历
某天,用户现场人员找到我,说应用的某个功能一点就报错,在数据库上直接跑功能对应的SQL也报错,SQL大致如下: 后来向他们要了alert.log和trace files,通过分析,确定为用户数据库版本 ...
- eclipse怎么停止building workspace
Eclipse 一直不停 building workspace完美解决总结 一.产生这个问题的原因多种 1.自动升级 2.未正确关闭 3.maven下载lib挂起 等.. 二.解决总结 (1).解决方 ...
- SpringCloud的微服务网关:zuul(实践)
Zuul的主要功能是路由和过滤器.路由功能是微服务的一部分,比如/api/user映射到user服务,/api/shop映射到shop服务.zuul实现了负载均衡. zuul有以下功能: Authen ...
- express实践(一)
涉及以下这些内容: 主体. cookie.session 数据 模板引擎 服务器基本结构: const express=require('express'); const static=require ...
- python实现 多叉树 寻找最短路径
完全原创,能力有限,欢迎参考,未经允许,请勿转载 ! 完全原创,能力有限,欢迎参考,未经允许,请勿转载 ! 完全原创,能力有限,欢迎参考,未经允许,请勿转载 ! 完全原创,能力有限,欢迎参考,未经允许 ...
- logback中批量插入数据库的参考代码
protected void insertProperties(Map<String, String> mergedMap, Connection connection, long eve ...
- tar命令-vi编辑器-磁盘分区及格式化-软链接及硬链接文件
一.tar命令 1.将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) [root@localhost /] # cat /etc/passwd /etc/group ...
- canvas实现的粒子效果
前言:我的这个share很简单,没什么技术水准,主要是我自己觉得canvas这个标签很cool!,简单实用又能装X,而且又能实现很多看起来很炫的东西. 一 关于canvas <canvas> ...
- canvas图像模糊以及图像变形问题
问题:有时用canvas作图时发现图像会出现模糊不清晰的问题,甚至做出来的图呈现出的效果与我们给的数值所应该呈现出的效果不一致 原因:当你在支持html5 canvas的浏览器下查看页面的时候,can ...