`
deng129253
  • 浏览: 428 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

深入理解java虚拟机第二章JAVA内存区域和内存溢出异常读后感

阅读更多
1)java内存分为程序计数器,堆,栈,方法区
程序计数器是线程私有的,可以看作当前线程所执行的字节码的行号指示器
栈是线程私有的,每个方法创建一个栈帧,用于存储局部变量表,操作数栈,动态链接,方法出口等信息
堆是所有线程共享的一块内存区域,唯一目的就是存放对象实例,是垃圾收集器主要管理的区域,java堆可以分为新生代和老年代,新生代可以细分为Eden空间,From Survivor空间,To Survivor空间等
方法区是线程共享的一块内存区域,用来存储已经被虚拟机加载的类信息,静态变量,常量,即使编译器编译后的代码等数据
2)对象访问
如下面代码所示:
Object obj = new Object();
引用obj指向栈,对象new Object()指向堆,存储Object对象所有的实例数据值,还包含能查找到此对象类型数据(如对象类型,父类,实现的接口,方法等)的地址信息
对象访问方式有两种:使用句柄和直接指针
使用句柄访问方式,java堆中会划分一块内存作为句柄池,引用对象存储的是对象的句柄地址,而句柄包含了对象实例数据和类型数据各自的具体地址信息
使用直接指针访问方式,引用对象指向储存对象实例数据的堆地址,并放置访问类型数据的相关信息
使用句柄最大的好处是移动数据时只需要改变句柄中的实例数据指针,而不用修改引用对象
使用直接指针的好处是速度更快,节省了一次指针定位的时间开销
3)OutOfMemoryError
堆溢出:-XX:+HeapDumpOnOutOfMemoryError,打印内存堆转储快照,使用IBM Analysis工具分析
栈溢出
方法区溢出
分享到:
评论

相关推荐

    深入理解Java 虚拟机 原代码

    《深入理解Java虚拟机》是Java开发者深入了解JVM(Java Virtual Machine)的必备经典书籍,其第二版提供了原代码分析,帮助读者更直观地理解JVM的工作原理。这本书的各个章节涵盖了从内存管理到垃圾回收,从类加载...

    深入java虚拟机pdf英文版

    第二部分则深入探讨了Java虚拟机的内部机制,涵盖了类的生命周期、链接模型、垃圾回收、栈和局部变量操作、类型转换等内容。 ### 第一部分:Java的架构 - **第1章:Java体系结构简介** - 提供了一个概览,介绍Java...

    Java虚拟机(第二版)1

    《Java虚拟机(第二版)》一书涵盖了Java开发与运行环境的核心部分——Java虚拟机(JVM)的深入解析。这本书旨在帮助读者理解JVM的工作原理,优化Java应用程序的性能,并解决运行时可能出现的问题。 Java自1995年...

    Java虚拟机

    第二部分讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因;常见的垃圾收集算法以及垃圾收集器的特点和工作原理;常见虚拟机监控与故障处理工具的原理和使用方法。第三部分...

    UnderstandingTheJVM:《深入理解Java虚拟机 - Jvm高级特性与最佳实践(第三版)》阅读笔记

    本repository为《深入理解Java虚拟机 - Jvm高级特性与最佳实践(第三版)》阅读笔记,因为第一章主要讲的是Java的发展历史,这里就不做笔记,直接从第2章的"Java内存区域与内存溢出异常"讲起。 第二部分 自动内存...

    第二章 JVM内存简介.wps

    该文档简单介绍了Java虚拟机的内存划分以及一些常见的内存溢出,此资料参考于《深入理解Java虚拟机书籍》

    最新Java面试题

    #### 第二章 数据类型和运算符 - **8种基本数据类型及其字节数**:Java提供了八种基本数据类型,包括四种整型(`byte`、`short`、`int`、`long`)、两种浮点型(`float`、`double`)、一种字符型(`char`)和一种...

    04747《Java语言程序设计(一)》教材电子版

    3. **自动内存管理**:Java具有自动垃圾回收机制,这意味着程序员无需手动管理内存分配和释放,这极大地减少了因内存泄漏或内存溢出导致的程序崩溃等问题。 4. **面向对象**:Java是一种纯粹的面向对象编程语言,它...

    《java程序设计习题集》读书笔记上册

    #### 第二章:Java语言特性 1. **标识符规则** - Java标识符区分大小写。 - 标识符可以由字母、数字、下划线(_)和美元符号($)组成,但不能以数字开头。 2. **字符类型** - Java采用双字节字符表示法,即`...

    Java进阶教程解密JVM视频教程

    第二章:内存结构 1. 程序计数器 2. 虚拟机栈 3. 本地方法栈 4. 堆 5. 方法区 6. 直接内存 第三章:垃圾回收 1. 如何判断对象可以回收 2. 垃圾回收算法 3. 分代垃圾回收 4. 垃圾回收器 5. 垃圾回收调优 第四章:类...

    Java开发技术大全(500个源代码).

    示例描述:本章学习Java的输入和输出。 CopyFile.java 文件复制实例 dir.java 显示目录下的所有文件和目录 encrypt.java 文件加密 FileList.java 自己实现的一个文件名称枚举类 MyDataIO.java 数据输入输出示例...

    java学习笔记

    #### 第二章:Java基本类型变量 ##### 变量定义 - **变量**:用来存储数据的容器。 - **声明与初始化**: - 必须声明变量类型和名称。 - 可以在声明时初始化变量,也可以之后进行初始化,但必须在使用前完成。 ...

    Sun-JAVA-scjp.ppt

    **第二章:标识符、关键字、类型** - **标识符规则**:标识符命名规范,不能以数字开头,区分大小写。 - **关键字**:const和goto虽然未使用,但仍是关键字,null、true、false为保留字,friendly和sizeof不是Java...

    Java习题

    #### 第二章 表达式、运算符和选择 ##### 复习题解析 1. **布尔表达式的等价性** - 这部分涉及逻辑运算符(逻辑非`!`、逻辑与`&&`、逻辑或`||`)的性质,需要根据德摩根定律等原则判断。 2. **“短路”(Short-...

    McGraw-Hill.Data.Structures.with.Java.2nd.Ed

    《McGraw-Hill Data Structures with Java 第二版》是由John R. Hubbard教授编写的关于数据结构及其在Java中的实现的专业教材。本书旨在为计算机科学领域的学生提供一套全面且深入的数据结构学习资料,并通过大量的...

Global site tag (gtag.js) - Google Analytics