一、基础篇 JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别 Java内存模型 内存可见性、重排序、顺序一致性、volatile、锁、final 垃圾回收 内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定 JVM参数及调优 Java对象模型 oop-klass、对象头 ...
分类:
编程语言 时间:
2019-11-22 00:34:49
阅读次数:
72
一、什么是类加载? JVM将class字节码文件加载到内存中, 并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class 对象,作为方法区类数据的访问入口。 二、类加载过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、链 ...
分类:
其他好文 时间:
2019-11-21 23:20:17
阅读次数:
179
JVM的运行数据区 首先我简单来画一张 JVM的结构原理图,如下。 我们重点关注 JVM在运行时的数据区,你可以看到在程序运行时,大致有5个部分。 1.方法区 不止是存“方法”,而是存储整个 class文件的信息,JVM运行时,类加载器子系统将会提取 class文件里面的类信息,并将其存放在方法区中 ...
分类:
编程语言 时间:
2019-11-21 12:11:33
阅读次数:
101
List的add方法与addAll方法 区别 add add是将传入的参数作为当前List中的一个Item存储,即使你传入一个List也只会另当前的List增加1个元素 addAll addAll是传入一个List,将此List中的所有元素加入到当前List中,也就是当前List会增加的元素个数为传 ...
分类:
其他好文 时间:
2019-11-20 15:27:16
阅读次数:
59
从上面这个图我们总体上对JVM的结构特别是内存结构有了比较清晰的认识,虽然在JDK1.8+的版本中,JVM内存管理结构有了一定的优化调整。主要是方法区(持久代)取消变成了直接使用元数据区(直接内存)的方式,但是整体上JVM的结构并没有大改,特别是我们最为关心的堆内存管理方式并没有在JDK1.8+的版本中有什么变化,所以图中的结构整体上是没有什么不准确的,之所以将方法区以及持久代标注出来,主要还是为了起到对比认识的作用,大家知道就可以了。
关于持久代元数据区的使用问题,目前可以理解就是使用的物理内存,理论上是不受JVM自动内存回收机制管理的,如果不设置参数大小默认最大使用限制就是操作系统可用物理内存的大小,设置了-XX:MetaspaceSize参数的话,JVM就会在使用物理内存空间时自己进行限制。
至于直接内存与物理内存到底是不是一回事,我认为对于我们理解上没有区别,只是概念的区别,另外就是对这块内存使用细节上的区别,如果不受JVM的自动回收管理,那么怎么管理呢?说到底还是JVM本身在直接使用物理内存或者说是直接内存(用时直接“malloc”物理内存区域,而不再是JVM进程启动时初
分类:
编程语言 时间:
2019-11-19 01:19:54
阅读次数:
88
11.JVM内存分哪几个区,每个区的作用是什么? java虚拟机主要分为以下一个区: 方法区:1. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的卸载2. 方法区主要用来存储已被虚拟机加载的类的信息、常量、静态变量和即时编译器 ...
分类:
其他好文 时间:
2019-11-17 12:53:24
阅读次数:
86
jvm学习之gc垃圾回收机制 1、什么是垃圾回收? 堆中使用对象,但是不能一直放在那里,会占内存,所以需要垃圾回收,释放多余内存,从而保证程序的正常运行。 2、垃圾回收之前应该判断到底什么是垃圾? 引用计数法:对象保存着被引用的次数,被引用一次就+1,删除引用一次-1,如果引用个数为0,那么会被回收 ...
分类:
其他好文 时间:
2019-11-16 23:41:39
阅读次数:
87
类最基本的要素:字段+方法(变量+函数) 构造方法主要作用是完成对象的初始化。方法名与方法名类名相同 方法的重载:参数个数及类型不同 this:指这个对象本身 a.访问这个对象的字段及方法;b.区分字段与局部变量;c.用于构造方法调用另一个构造方法 因此写程序主要是定义类,将类中的字段和方法写好 1 ...
① 格式 : 1》 static修饰的,称为静态成员,非static修饰的,称为非静态成员。 ② 内存位置: 1》static修饰的,在方法区的静态区中,非static修饰的,在堆中的对象里。 ③ 生命周期: 1》 static修饰的 ,随着类的加载而加载,随着类的消亡而消亡,非static随着对象 ...
分类:
其他好文 时间:
2019-11-16 00:36:21
阅读次数:
50
jvm:分为 栈,堆,方法区metho area【属于堆】 栈: 1.压栈:先进后出,后进先出,栈描述的是方法执行的内存模型,每个方法被调用都会创建一个栈帧(存储局部变量,操作数,方法出口) 2.JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(参数,局部变量) 3.栈属于线程私有不能实现线 ...
分类:
编程语言 时间:
2019-11-14 22:17:32
阅读次数:
77