JVM读书笔记之OOM】的更多相关文章

在Java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(OOM)异常的可能,本文总结了若干实例来验证异常及发生的场景. 下文代码的开头都注释了执行时所需要设置的虚拟机启动参数(注释中VM Args后面跟着的参数),如果使用控制台命令来执行程序,那直接跟在Java命令之后书写就可以.如果使用Eclipse IDE,则可以参考下图在Debug/Run页签中设置.本文的代码都是基于Sun公司的HotSpot虚拟机运行的,对于不同公司的不同…
本内容由<深入理解java虚拟机>的部分读书笔记整理而成,本读者计划连载. 通过如下图和文字介绍来了解几个运行时数据区的概念. 方法区:它是各个线程共享的区域,用于内存已被VM加载的类信息.常量.静态变量.即时编译器编译的代码等数据.JVM规范对这个区域的限制很宽松,如同堆一样不需要连续的内存.可选择固定大小.可扩展的大小外,还可以选择不实现垃圾收集.因为在些区域的垃圾收集必要性不高且效果较差.如果回收也是常量池的回收和类型的卸载,但此操作异常困难.当方法区无法满足内存的分配时,抛OutOfM…
对于从事C.C++程序开发人员来说,在内存管理领域,他们既是拥有最高权力的“皇帝”又是从事最基础工作的“劳动人民”--既拥有每一个对象的“所有权”,又负责每一个对象生命开始到终结的维护责任. 对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题,由虚拟机管理内存这一切看起来都很美好.不过,也正是因为Java程序员把内存控制的权力交给了Java虚拟机,一旦出现内存泄漏和内存溢出方面的问题,如果不了…
1 概念 java virtual machine为java虚拟机,运行使用jdk中编译器编译的java程序. 2 JVM内存模型 程序计数器:线程私有.当前线程正在执行的行号指示器. Java虚拟机栈:线程私有.即将运行的java方法创建的区域. 本地方法栈:线程私有.即将运行的本地方法创建的区域. 堆:线程共享,存放对象. 方法区:线程共享.存放加载的,类.常量.静态变量.即时编译器编译后的代码. 线程私有:生命周期和所属线程一样. 线程共享:jvm启动时创建,停止时销毁时 3 类加载过程…
垃圾回收的过程主要包含两部分:找出已死去的对象.移除已死去的对象. 确定哪些对象存活有两种方式:引用计数算法.可达性分析算法. 方案一:引用计数算法 给对象中加入一个引用计数器.每当有一个地方引用它时.计数器值加1:当引用失效时,计数器值减1:计数器的值为0时即表明对象已经死去(可被回收). 长处:实现简单.判定效率高. 缺点:难解决对象之间互相引用的问题. 如:对象objA和objB都有字段instance,令objA.instance=objB,objB.instance=objA;除此之外…
一.早期(编译器)优化 语法糖 c#和java的泛型截然不同看似相同,c#是真实的泛型 编译运行一直存在 List<string> 和List<int> 就完全是两个类 而Java中 是伪泛型采用类型擦除的方法实现泛型    List<Integer> List<String> 运行期就是同一个类 编译期错误,无法识别两个方法. 语法糖:自动拆箱.装箱 可变参数 遍历循环 条件编译 二.晚期(运行期)优化 二者各有优势: 分层编译策略: 有两种进行热点探测的…
1 概述 说起垃圾收集( Garbage Collection , GC ) ,大部分人都把这项技术当做 Java 语言的伴生产物.事实上, GC 的历史远远比 Java 久远,1960 年诞生于 MIT 的 Lisp 是第一门真正使用内存动态分配和垃圾收集技术的语言.当 Lisp 还在胚胎时期时,人们就在思考 GC 需要完成的三件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 经过半个世纪的发展,内存的动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化”时代,那为什么我们还…
为了证明我已经啃完这本书然后买新书不用剁手...脑图画了8个钟,感觉整个人都不好了T_T 脑细胞不知道死了多少... 其实没吃透,估计若干年后要重新翻开来看...…
深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理解Java虚拟机 >(周志明著)读书笔记. Java程序员一般都知道JVM中存在栈和堆的,并简单了解对象是在堆上分配的,这点从C/C++转过Java的程序员很容易想到.但Java由于其自身的特性,还有一些其他的内存区域,如下图所示: 程序计数器 程序计数器占用的内存空间不大,里面记录了各线程当前字节码的…
今天看JVM的过程中收获颇丰,但一想到这些学习心得将来可能被遗忘,便一阵恐慌,自觉得以后要开始坚持做读书笔记了. 操作系统层面的内存管理 物理内存是一切内存管理的基础,Java中使用的内存和应用程序的内存一样是从物理内存申请下来的内存.物理内存也就是寄存器,通过地址总线与CPU相连,通常情况下地址总线与寄存器有着相同的位数,同时也决定了处理器最大可寻址的地址空间. 为了提高物理内存的利用率而产生了虚拟内存,也就是逻辑上的内存.为了保证操作系统和应用程序的稳定性,运行在操作系统中的用户程序不能访问…