JVM
虚拟机相关
Justin的后端书架
既然选择了远方,便只顾风雨兼程
展开
-
JVM系列之类加载器
前言上节我们介绍了类加载的时机和过程,对类加载有了个初步的认识,上节我们有不断提到一个东西:类加载器,那么什么是类加载器?又有哪些类加载器?类加载器之间的联系等等一些问题,今天我们将会围绕这些点展开,那么,开始我们今天的JVM之旅吧。什么是类加载器?把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类,实现该动作的代码模块就被称为“类加载器”。类与类加载器的联系类加载器用于实现类的..原创 2020-06-05 20:10:12 · 19960 阅读 · 0 评论 -
JVM系列之类加载
前言虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程就称为JVM的类加载机制。今天我们主要从下面两个方面说下类加载:类加载时机和类加载过程。类加载时机类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段,其中验证+准备+解析3个阶段称为连接。加载、验证、准备、初始化和卸载5个阶段的顺序是确定的,类加载过程必须按这5个顺序开始,解.原创 2020-06-05 20:07:07 · 19980 阅读 · 0 评论 -
JVM系列之内存分配与回收策略
前言经过前面几篇文章,我们已经对JVM虚拟机有了个初步认识,也了解了各区域应用哪些收集器,以及每个收集器用哪些收集算法,但是在这一系列过程中,其实就是一个对象的由生到死的过程,那么在这过程中对象是怎么处理它的生命周期的呢,今天我们就来介绍下对象在内存中的分配和回收分配给对象的内存,那么,让我们带着愉快的周末心情来开启今天的JVM之旅吧。内存分配内存分配,通俗讲就是对象在堆上分配:对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数对象也可能直接.原创 2020-06-05 19:58:46 · 20091 阅读 · 0 评论 -
JVM系列之对象是否存活
前言之前我们讲过了JVM的内存区域和内存溢出,今天我们谈下处于JVM中的对象的问题,这些对象是否存活,如何判断,又如何去处理呢,带着这些疑问我们开启今天的JVM之旅。如何判断对象是否存活? 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值就+1,当引用失效时,计数器的值就-1;当计数器的值为0时,就表示该对象为不可用对象; 优点:引用计数算法实现简单,效率也很高 缺点:很难解决对象之间相互循环引用时的对象存活判断,例如对象A和B相互引用对方,即使A和B.原创 2020-06-05 16:41:01 · 20136 阅读 · 0 评论 -
JVM系列之OOM异常
前言之前我们简单的介绍了下虚拟机内存结构,今天我们讲下虚拟机的内存相关错误异常,主要从几大内存区域分类介绍:Java堆溢出、虚拟机栈和本地方法栈溢出、方法区和运行时常量池溢出、本机直接内存溢出。Java堆溢出 什么时候产生堆溢出? 堆用于存储对象实例,只要不断的创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量达到了最大堆容量限制时就会产生堆溢出异常; 堆溢出如何分析? 通过设置参数:-XX:+Heap.原创 2020-06-04 22:27:53 · 20797 阅读 · 0 评论 -
JVM系列之Java内存区域
前言对于Java开发者来说,在虚拟机的自动内存管理机制下,不需要去关心每个对象的存亡,只需要创建出来就完全扔给了虚拟机去处理,而且还不容易出现内存泄露和内存溢出的问题,这看起来很美好,但是如果一旦出现内存泄露和溢出的问题,你就会很棘手,所以我们一定要了解Java虚拟机是如何管理内存的,否则你排出问题将无从下手。下面我们将从以下2个方面谈谈Java虚拟机的内存区域:运行时数据区域、对象访问。运行时数据区域Java虚拟机在执行Java程序时会把它管理的内存划分为若干区域,这些区域各有自己的作用.原创 2020-06-04 22:18:00 · 20732 阅读 · 0 评论 -
面试系列之JVM
说说JVM的内存模型?方法区:存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据堆:存放对象实例,几乎所有的对象实例都要在堆上分配程序计数器:当前线程所执行的字节码的行号指示器虚拟机栈:描述的是Java方法执行的内存模型本地方法栈:为虚拟机使用到的native方法服务讲讲什么情况下回出现内存溢出,内存泄漏?内存溢出 out of memory:指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory(比如申请了一个integer,但给它.原创 2020-05-16 19:57:42 · 28603 阅读 · 0 评论 -
一个关于jvm堆溢出引发的思考
在本地测试无误的程序,放上正式服时,出现了堆溢出,本地是Windows系统下的,服务器是linux系统,后来经过测试发现是我在本地跑程序时,在eclipse中添加了如下参数:此处先解释下上面各参数的的含义:-Xms512m 堆的最小值 -Xmx1024m 堆的最大值 另外jvm垃圾回收采用分代搜集的方法,把堆分为三个部 分,新域,旧域和永久域。Jvm生成的所有新对象原创 2015-09-11 18:42:44 · 65768 阅读 · 2 评论