深入理解java虚拟机学习 笔记 第二章 java 内存区域和内存溢出异常

2.2 运行时区域

java虚拟机划分成若干个不同的数据区域,

1.程序计数器,字节码解释器工作时就是通过改变计数器的值来取吓一跳需要执行的字节码命令

了解 String.intern()方法

作用: 如果字符串常量池中一个包含了一个等于此String对象的字符串,则返回代表池中的这个字符串的String对象,否则将此对象包含的字符串添加到常量池中,并返回此String对象的引用。

实战

将堆的最小值 -Xms参数与最大值-Xmx参数设置为一样即可避免堆自动扩展  通过参数 -XX:+HeapDumpOnOutOfMemoryError可以让虚拟机在出现内存溢出异常的时候Dump出当前内存堆转储快照以便事后进行分析

java 堆内存 OOM异常 是常见的, 会出现 java.lang.OutOfMemoryError: Java heap space   使用 eclipse memory analyzer 分析内存溢出

递归,容易出现 StackOverFlowError

方法区和运行时常量区测试思路:运行时候产生大量的类去填满方法区,直到溢出。  CGLib 创建类, 生成classcode 来搞   ,常见的还有  大量的JSP或者动态产生jSP文件应用

eclipse memory analyzer 使用

  1. 后面要了解的问题

    1. 了解 String.intern()方法
    2. eclipse memory analyzer 使用
    3. jdk和虚拟机的关系
    4. 如何查看gc日志
时间: 2024-08-02 06:55:05

深入理解java虚拟机学习 笔记 第二章 java 内存区域和内存溢出异常的相关文章

《深入理解Java虚拟机》笔记 第二章 Java虚拟机内存区域

? ? 这句话感觉道出了GC的本质 ? ? ? ? ? ? 1.程序计数器(Program Counter Register) ? ? 程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器.字节码解释器工作时就是通过改为这个计数器的值来选取下一条需要执行的字节码指令,分支.循环.跳转.异常处理.线程恢复等基础功能都需要依赖这个计数器来完成. ? ? 由于Java虚拟机的多线程是通过线程轮流切换CPU时间片的方式来实现的,所以在任何一个时刻,一个处理器(对于多核处理

java 虚拟机 学习笔记 第二章 走进java

java 获得获得认可的原因 结构严谨.面向对象 一次编写 到处运行 相对安全的内存管理和访问机制 避免绝大部分的内存泄露和指针越界 运行时编译即优化 jdk是用于支持java程序开发的最小环境 时间表 1991    oak 1995  oak 改为java 1996 4  java one 1997  sun jdk 1.1    jdbc jar javabeas  rmi  内部内  反射 2002  2月13  jdk1.4  正则表达式  异常连 NIO  日志类  xml 2004

《深入理解Java虚拟机》笔记 第二章 各内存区域溢出形式

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

《深入理解Java虚拟机》读书笔记---第二章 Java内存区域与内存溢出异常

Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来.这一章就是给大家介绍Java虚拟机内存的各个区域,讲解这些区域的作用,服务对象以及其中可能产生的问题. 1.运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域. 1.1程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型中里,字

《深入Java虚拟机学习笔记》- 第7章 类型的生命周期

一.类型生命周期的开始 如图所示 初始化时机 所有Java虚拟机实现必须在每个类或接口首次主动使用时初始化: 以下几种情形符合主动使用的要求: 当创建某个类的新实例时(或者通过在字节码中执行new指令,或者通过不明确的创建.反射.克隆和反序列化): 当调用某个类的静态方法时(即在字节码中执行invokestatic指令): 当使用某个类或接口的静态字段,或者对该字段赋值时(用final修饰的静态字段除外,它被初始化为一个编译时常量表达式): 当调用Java API中的某些反射方法: 当初始化某个

《深入Java虚拟机学习笔记》- 第18章 finally子句

本章主要介绍字节码实现的finally子句.包括相关指令以及这些指令的使用方式.此外,本章还介绍了Java源代码中finally子句所展示的一些令人惊讶的特性,并从字节码角度对这些特征进行了解释. 1.微型子例程 字节码中的finally子句表现的很像"微型子例程".Java虚拟机在每个try语句块和与其相关的catch子句的结尾处都会"调用"finally子句的子例程.finally子句结束后(这里的结束指的是finally子句中最后一条语句正常执行完毕,不包括抛

《深入Java虚拟机学习笔记》- 第4章 网络移动性

Java虚拟机学习笔记(四)网络移动性 <深入Java虚拟机学习笔记>- 第4章 网络移动性,布布扣,bubuko.com

《深入Java虚拟机学习笔记》- 第13章 逻辑运算

<深入Java虚拟机学习笔记>- 第13章 浮点运算 <深入Java虚拟机学习笔记>- 第13章 逻辑运算,布布扣,bubuko.com

《深入Java虚拟机学习笔记》- 第12章 整数运算

Java虚拟机提供几种进行整数算术运算的操作码,他们执行基于int和long类型的运算.当byte.short和char类型值参与算术运算时,首先会将它们转换为int类型.这些操作码都不会抛出异常,溢出在这里通常可以被忽略. 整数加法 操作码 操作数 说明 iadd (无) 从栈中弹出两个int类型数,相加,然后将所得int类型结果压回栈 ladd (无) 从栈中弹出两个long类型数,相加,然后将所得long类型结果压回栈 将一个常量与局部变量相加 操作码 操作数 说明 iinc vindex