JVM之方法区】的更多相关文章

 基本特性: 线程共享区域,存储被JVM加载的类信息.常量.静态变量.即时编译器编译的代码等 堆的逻辑部分,不限定方法去内的内存位置和编译代码的管理策略,不限定实现垃圾回收 容量可不定也可动态扩展,不要求物理连续 回收主要针对常量池的回收,和类型的卸载 HotSpot虚拟机方法区: 使用永久代实现方法区.不包含字符串常量池.…
在Java虚拟机(以下简称JVM)中,类包含其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量池,已确定的符号引用和虚方法表. 在过去(当自定义类加载器使用不普遍的时候),类几乎是“静态的”并且很少被卸载和回收,因此类也可以被看成“永久的”.另外由于类作为JVM实现的一部分,它们不由程序来创建,因为它们也被认为是“非堆”的内存. 在JDK8之前的HotSpot虚拟机中,类的这些“永久的”数据存放在一个叫做永久代的区域.永久代一段连续的内存空间,我们在JVM…
一.什么式方法区 方法区,也称非堆(Non-Heap),又是一个被线程共享的内存区域.其中主要存储加载的类字节码.class/method/field等元数据对象.static-final常量.static变量.jit编译器编译后的代码等数据.另外,方法区包含了一个特殊的区域"运行时常量池". (1)加载的类字节码:要使用一个类,首先需要将其字节码加载到JVM的内存中.至于类的字节码来源,可以多种多样,如.class文件.网络传输.或cglib字节码框架直接生成. (2)class/m…
什么是方法区? 方法区(Method Area)是jvm规范里面的运行时数据区的一个组成部分,jvm规范中的运行时数据区还包含了:pc寄存器.虚拟机栈.堆.方法区.运行时常量池.本地方法栈. 方法区存储东西? 主要用来存储class.运行时常量池.字段.方法.代码.JIT代码等. 注意: (1)运行时数据区跟内存不是一个概念. (2)方法区是运行时数据区的一部分 (3)方法区是jvm规范中的一部分,并不是实际的实现,切忌将规范跟实现混为一谈. 我们再来看下永久带(Perm区): 永久带又叫Per…
前言 方法区是运行时数据区的最后一个部分: 从线程共享与否的角度来看: 大家可能在这里有些疑惑,方法区和元空间的关系到底是怎样的?请往下看,下面会为大家解惑. 栈.堆.方法区的交互关系 下面就涉及了对象的访问定位: Person:存放在元空间,也可以说方法区: person:存放在Java栈的局部变量表中: new Person():存放在Java堆中. 方法区的理解 <Java虚拟机规范>中明确说明:"尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾…
转载:https://www.jianshu.com/p/ae97b692614e?from=timeline JVM体系结构 JVM是一种解释执行class文件的规范技术.   JVM体系结构 我翻译的中文图:   中文图 类装载器子系统 在JVM中负责装载.class文件(一种8位二进制流文件,各个数据项按顺序紧密的从前向后排列, 相邻的项之间没有间隙,经编译器编译.java源文件后生成,每个类(或者接口)都单独占有一个class文件). 运行时数据区 方法区 当JVM使用类装载器定位cla…
一.简介 方法区在JVM中也是一个非常重要的区域,它与堆一样,是被线程共享的区域.在方法区中,存储了每个类的信息(包括类的名称.方法信息.字段信息).静态变量.常量以及编译器编译后的代码等. 方法区(method area)只是JVM规范中定义的一个概念,用于存储类信息.常量池.静态变量.JIT编译后的代码等数据,具体放在哪里,不同的实现可以放在不同的地方.而永久代是Hotspot虚拟机特有的概念,是方法区的一种实现,别的JVM都没有这个东西. 二.方法区结构 2.1.先看classLoader…
一.类加载或类初始化:当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载.连接.初始化3个步骤来对该类进行初始化.如果没有意外,JVM将会连续完成3个步骤. 二.类加载时机:  1.创建类的实例,也就是new一个对象 2.访问某个类或接口的静态变量,或者对该静态变量赋值 3.调用类的静态方法 4.反射(Class.forName("com.lyj.load")) 5.初始化一个类的子类(会首先初始化子类的父类) 6.JVM启动时标明的启动类,即文件名和类名相同的那个…
1.jvm内存结构 静态编译:把java源文件编译成字节码文件class,这个时候class文件以静态方式存在. 类加载器:把java字节码文件加载到内存中 方法区:将字节码放到方法区作为元数据(简单名字+描述符). 堆:对象(类的实例) 方法区和堆:运行时数据区在所有线程间共享 虚拟机栈.本地方法栈.程序计数器:运行时数据区线程私有 2.堆 (1)对于大多数应用来说,java堆是java虚拟机所管理的内存中的最大的一块 (2)java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建 (3)…