JVM的内存结构】的更多相关文章

前言:        我们在运行程序时,有时会碰到内存溢出(OutOfMemoryError)的问题,为了解决这种问题,我们有必要了解JVM的内存结构和垃圾回收机制. 正文: 1.JVM堆内存结构         JVM主要管理两种类型的内存,堆内存和非堆内存.         "java虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此分配,堆是java虚拟机启动时创建的",对内存就是代码可及的地方.        "java虚拟机除堆外的内存称为非堆内存&…
内存作为系统中重要的资源,对于系统稳定运行和高效运行起到了关键的作用,Java和C之类的语言不同,不需要开发人员来分配内存和回收内存,而是由JVM来管理对象内存的分配以及对象内存的回收(又称为垃圾回收.GC),这对于开发人员来说确实大大降低了编写程序的难度,但带来的一个副作用就是,当系统运行过程中出现JVM抛出的内存异常(例如OutOfMemoryError)的时候,很难知道原因是什么,另外一方面,要编写高性能的程序,通常需要借助内存来提升性能,因此如 何才能合理的使用内存以及让JVM合理的进行…
一.JVM 垃圾回收机制和常见算法 Sun 公司只定义了垃圾回收机制规则而不局限于其实现算法,因此不同厂商生产的虚拟机采用的算法也不尽相同.GC(Garbage Collector)在回收对象前首先必须发现那些无用的对象,如何去发现定位这些无用的对象?常用的 搜索算法 如下: 1)引用计数器算法(废弃) 引用计数器算法是给每个对象设置一个计数器,当有地方引用这个对象的时候,计数器+1,当引用失效的时候,计数器-1,当计数器为 0 的时候,JVM 就认为对象不再被使用,是“垃圾”了.引用计数器实现…
对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bug.同时,JVM也是面试环节的中重灾区.今天开始,<JVM详解>系列开启,带大家深入了解JVM相关知识. 我们不能为了面试而面试,但是学习会这些核心知识你必定会成为面试与工作中"最亮的一颗星".本系列首发于微信公众号"程序新视界".下面,开启我们的第一篇文章<JVM之内存结构详解>. 学习也是要讲究方式方法的,本系列学习过程中会引导大家通过<费曼…
JVM的内存结构以及性能调优 发布时间: 2017-11-22 阅读数: 16675 JVM的内存结构以及性能调优1:JVM的结构主要包括三部分,堆,栈,非堆内存(方法区,驻留字符串)堆上面存储的是引用数据类型的实例,栈当中存储的是变量的引用,方法区主要存储的是运行时常量池,以及类.方法相关的数据.堆主要分为新生代,年老代1:新生代 新创建的对象是存放在新生代当中的,Person P=new person();当新生代内存空间被用完时,就会触发垃圾回收.这个垃圾回收叫做Minor GC. 2:年…
这里概要介绍一下JVM在启动后,作为操作系统的一个进程的基本结构,以及从操作系统角度看,JVM如何管理它从操作系统里申请来的内存的,也就是JVM的内存结构或者叫JVM内存模型. 1.JVM的基本结构 ================ JVM启动后,对操作系统来说,JVM是一个的进程,这个进程的基本结构如上图所示.它包括:类加载器子系统.运行时数据区.执行引擎和本地方法接口. 运行时数据区是JVM从操作系统申请来的堆空间和操作系统给JVM分配的栈空间的总称.JVM为了运行Java程序,又进一步对运…
JVM:内存结构 说明:这是看了 bilibili 上 黑马程序员 的课程 JVM完整教程 后做的笔记 内容 程序计数器 虚拟机栈 本地方法栈 堆 方法区 直接内存 1. 程序计数器 1.1 定义 Program Counter Register 程序计数器(寄存器) 作用:是记住下一条 JVM 指令的执行地址 特点 是线程私有的 不会存在内存溢出 1.2 作用 JVM指令 -> 解释器 -> 机器码 -> CPU执行 // 二进制字节码 JVM指令 // java源代码 0: gets…
JVM是按照运行时数据的存储结构来划分内存结构的.JVM在运行Java程序时,将他们划分成不同格式的数据,分别存储在不同的区域,这些数据就是运行时数据.运行时数据区域包括堆,方法区,运行时常量池,程序计数器,虚拟机栈,本地方法栈. Java堆 Java堆是JVM所管理的内存中最大的,是被所有线程共享的一块内存区域,在虚拟机启动时创建,唯一目的就是存放对象实例.所有对象实例及数组都在堆上分配内存 方法区(别名非堆) 用于存放被装载的类型信息.类型的常量池.字段信息.方法信息.类静态变量.Class…
Java的虚拟机自身结构图: JVM内存结构主要包括两个子系统和两个组件.两个子系统分别是Classloader子系统和Executionengine(执行引擎)子系统:两个组件分别是Runtimedataarea(运行时数据区域)组件和Nativeinterface(本地接口)组件. Classloader子系统的作用: 根据给定的全限定名类名(如java.lang.Object)来装载class文件的内容到Runtimedataarea中的methodarea(方法区域).Java程序员可以…
JVM内存结构 方法区(JDK8以上叫元空间)和堆为线程共享区,虚拟机栈.本地方法栈及程序计数器为线程独占区,  还有一个没有在下图中体现的叫做直接内存(Direct Memory),不受JVM GC 管理. 1.线程共享区域随虚拟机的启动而创建关闭而销毁. 2.线程独占区域生命周期与线程相同, 依赖用户线程的启动/结束而创建/销毁(在Hotspot VM内, 每个线程都与操作系统的本地线程直接映射, 因此这部分内存区域的存/否跟随本地线程的生/死对应). 3. 直接内存并不是JVM运行时数据区…