JVM
文章平均质量分 86
戀戀
这个作者很懒,什么都没留下…
展开
-
《深入理解java虚拟机》学习笔记4——Java虚拟机垃圾收集器
Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK1.6中Sun HotSpot虚拟机的垃圾收集器如下:图中如果两个垃圾收集器直接有连线,则表明这两个垃圾收集器可以搭配使用。(1).Serial垃圾收集器:Seri原创 2017-06-27 16:27:14 · 208 阅读 · 0 评论 -
《深入理解java虚拟机》学习笔记3——垃圾回收算法
Java虚拟机的内存区域中,程序计数器、虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭;栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性。垃圾回收重点关注的是堆和方法区部分的内存。常用的垃圾回收算法有:(1).引用计数算法:给对象中添加一个引用计数器原创 2017-06-27 16:14:05 · 352 阅读 · 0 评论 -
《深入理解java虚拟机》学习笔记2——Java内存溢出实例
通过简单的小例子程序,演示Java虚拟机各部分内存溢出情况:(1).java堆溢出:Java堆用于存储实例对象,只要不断创建对象,并且保证GC Roots到对象之间有引用的可达,避免垃圾收集器回收实例对象,就会在对象数量达到堆最大容量时产生OutOfMemoryError异常。想要方便快速地产生堆溢出,要使用如下java虚拟机参数:-Xms10m(最小堆内存为10MB),-原创 2017-06-27 16:08:19 · 251 阅读 · 0 评论 -
深入JVM——常量池
上面主要分析了方法区以及方法区中的静态区域,下面将主要分析下常量池。常量池主要涉及到常量池里的内容和常量池解析这两块,这篇文章主要分析下常量池概念,大致说下常量池解析,以加深对常量池的理解。 在方法区中,每个类型都对应一个常量池,常量池中存储了诸如文字字符串、final变量值、类名和方法名常量。JVM把常量池组织为入口列表的形式,可通过索引来访问常量池中的各个入口,每个常量池入口的原创 2017-08-22 16:32:12 · 188 阅读 · 0 评论 -
深入JVM——方法区
当JVM使用类装载器装载某个类时,它首先要定位对应的class文件,然后读入这个class文件,最后,JVM提取该文件的内容信息,并将这些信息存储到方法区,最后返回一个class实例。上面是对类的装载过程作了个简单的描述,看了上面一段文字,也许你会问:方法区是什么?里面存了哪些内容?下面我们将对方法区作一个详细的描述。 方法区是什么?有哪些特点? 方法区是原创 2017-08-22 15:49:39 · 1071 阅读 · 0 评论 -
深入JVM——类型的生命周期(二)
上篇文章已经说了类型生命周期中的装载及连接过程,下面将主要描述下初始化过程。 首先要搞清楚初始化和实例化之间的区别:实例化是根据指定类型,在堆中生成一个实例对象,而初始化则不是,它所作的处理主要是为类变量赋予初始值,这里所说的初始值是相对于连接准备阶段的默认值而言的。 注意类变量和对象变量的区别:类变量是指类的静态变量或静态块,初始化时会重新赋值,而对象变量原创 2017-08-22 15:47:47 · 154 阅读 · 0 评论 -
深入JVM——类型的生命周期(一)
类型:类的描述信息,如此类有哪些局部变量、方法以及它的父类是什么等 类型存储地址:内存中的方法区 类型的生命周期的简单描述 类型生命周期过程: 装载——>连接——>初始化——>卸载 装载:把二进制的java类型(class文件)读入到java虚拟机中 连接:把读入的类型数据合并到虚拟机运行状态中去,连接包括三个子步骤:验证、准备和解析 初始化:给类型变量赋予适当的初原创 2017-08-22 15:46:26 · 195 阅读 · 0 评论 -
《深入理解java虚拟机》学习笔记9——实战:OutOfMemoryError异常
在JAVA虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行区域都有发生OutOfMemoryError异常的可能。1、java堆溢出java堆用于存储实例对象,只要不断的创建对象,并且保证GC Roots到对象之间有可达的路径来避免垃圾回收机制清楚这些对象,那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常。当出现java堆内存溢出时,异常堆栈信息java.lang原创 2017-08-22 14:58:36 · 232 阅读 · 0 评论 -
《深入理解java虚拟机》学习笔记9——对象的创建
1、对象的创建Java是一门面向对象的编程语言,在Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢?虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检原创 2017-08-22 11:18:50 · 164 阅读 · 0 评论 -
《深入理解java虚拟机》学习笔记8——Tomcat类加载器体系结构
Tomcat 等主流Web服务器为了实现下面的基本功能,都实现了不止一个自定义的类加载器:(1).部署在同一个服务器上的两个web应用程序所使用的Java类库可以相互隔离。(2).部署在同一个服务器上的两个web应用程序所使用的java类库可以相互共享。(3).许多Web服务器本身使用java语言实现,因此服务器所使用的类库应与应用程序的类库相互独立。(4).支持J原创 2017-06-27 17:09:23 · 330 阅读 · 0 评论 -
《深入理解java虚拟机》学习笔记7——Java虚拟机类生命周期
C/C++等纯编译语言从源码到最终执行一般要经历:编译、连接和运行三个阶段,连接是在编译期间完成,而Java在编译期间仅仅是将源码编译为Java虚拟机可以识别的字节码Class类文件,Java虚拟机对中Class类文件的加载、连接都在运行时执行,虽然类加载和连接会占用程序的执行时间增加性能开销,但是却可以为java语言带来高度灵活性和扩展性,java的针对接口编程和类加载器机制实现的OSGi以及热原创 2017-06-27 16:52:21 · 196 阅读 · 0 评论 -
《深入理解java虚拟机》学习笔记6——类加载机制
Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程。在加载阶段,java虚拟机需要完成以下3件事:a.通过一个类的全限定名来获取定义此类的二进制字节流。b.将定义类的二进制字节流所代表的静态存储结构转换为方法区的运行时数据结构。c.在java堆中生成一个代表该原创 2017-06-27 16:39:31 · 189 阅读 · 0 评论 -
《深入理解java虚拟机》学习笔记5——Java Class类文件结构
Java语言从诞生之时就宣称一次编写,到处运行的跨平台特性,其实现原理是源码文件并没有直接编译成机器指令,而是编译成Java虚拟机可以识别和运行的字节码文件(Class类文件,*.class),字节码文件是一种平台无关的中间编译结果,字节码文件由java虚拟机读取,解析和执行,java虚拟机屏蔽了不同操作系统和硬件平台的差异性。如今的java虚拟机已经称为一种通用平台,不但能够运行java原创 2017-06-27 16:32:25 · 260 阅读 · 0 评论 -
《深入理解java虚拟机》学习笔记1——Java内存结构
Java虚拟机规范规定的java虚拟机内存其实就是java虚拟机运行时数据区,其架构如下:其中方法区和堆是由所有线程共享的数据区。Java虚拟机栈,本地方法栈和程序计数器是线程隔离的数据区。(1).程序计数器:是一块较小的内存空间,其作用可以看作是当前线程所执行的字节码的行号指示器,字节码解析器工作时通过改变程序计数器的值来选取下一条需要执行的字节码指令。程原创 2017-06-27 15:57:55 · 257 阅读 · 0 评论