![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
5.JVM
文章平均质量分 88
郑学炜
这个作者很懒,什么都没留下…
展开
-
4.JVM内存划分
JVM的内存划分:首先来看一下JVM内存结构,它是由堆、栈、本地方法栈、方法区等部分组成。JVM中内存JVM中内存通常划分为三个部分,分别为堆内存与栈内存,程序计数器。栈内存主要用执行线程方法存放本地临时变量与线程中方法执行时候需要的引用对象地址。JVM所有的对象信息都存放在堆内存中,相比栈内存,堆内存可以所大的多,所以JVM一直通过对堆内存划分不同的功能区块实现对堆内存中对象管理。程序计数器:倘...原创 2018-03-07 13:54:35 · 303 阅读 · 0 评论 -
11.内存的溢出和泄漏及其解决方案
1、内存溢出 内存溢出:OOM(OutOfMemoryError)异常,即程序需要内存超出了虚拟机可以分配内存的最大范围。在Java 虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他区域都可能发生异常。2、内存溢出区域 常见的内存溢出分为以下几种: 2.1 Java堆溢出 Java 堆用于存储对象实例,只要不断地创建对象,并且防止垃圾回收机制清除这些对象,那么在对象数量达到最大堆限制就会产生...原创 2018-04-21 16:25:44 · 798 阅读 · 0 评论 -
13.JDK、JRE、JVM三者间的关系
JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。Java Runtime Environment(JRE)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。JVM是Java VirtualMachine(Java虚拟机)的缩写,是整个java实现跨平台的最核心...原创 2018-05-03 10:58:10 · 957 阅读 · 0 评论 -
9.Class类文件内部结构
Class文件结构在加类加载子系统之前,我们需要首先了解Class文件的内部结构。 Class文件是一种平台无关的二进制字节码格式(ByteCode),该字节码能够被JVM识别并解释执行或被JVM进一步编译成本地机器码(Native Code)后执行。Class文件以8位字节为单位,排列紧凑中间没有任何分隔符。 Class文件结构。ClassFile { //魔数固定位0xcafebabe ...原创 2018-04-13 19:10:50 · 246 阅读 · 0 评论 -
6.JVM堆中对象的创建、内存布局、访问定位
对象的创建一个简单的创建对象语句Clazz instance = new Clazz();包含的主要过程包括了类加载检查、对象分配内存、并发处理、内存空间初始化、对象设置、执行ini方法等。主要流程如下: 1. 类加载检查JVM遇到一条new指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相...原创 2018-04-13 16:53:13 · 400 阅读 · 0 评论 -
1.JVM基本框架
首先是JVM的整图结构图: 围绕JVM内存空间有三个重要的组成部分(绿色框):· 类加载器子系统(Class类文件内部结构怎样?JVM何时加载类?如何加载类?)(另外的博客)字节码执行子引擎(程序运行时帧栈结构?方法调用时如何支持多态?执行引擎如何工作?) (另外的博客)· 垃圾回收器GC(如何确定对象可回收?哪些垃圾回收方法?何时进行垃圾回收?)(另外篇博客)另外的内...原创 2018-04-13 13:17:32 · 626 阅读 · 1 评论 -
7.字节码执行引擎之运行时栈帧结构、方法调用和基于栈的执行引擎
很有意思~我希望大家可以好好看一下,虽然有点乱,但是好好花点时间我觉得你们可以学懂~并且可以学到很多东西~然后回味无穷。字节码执行引擎: JVM字节码执行引擎 运行时栈帧结构 局部变量表 操作数栈 动态连接 方法返回地址 方法调用 解析 分派 –“重载”和“重写”的实现 静态分派 动态分派 单分派和多分派JVM动态分派的实现 基于...原创 2018-04-13 11:34:40 · 509 阅读 · 0 评论 -
12.JVM的内存屏障
内存屏障是多线程编程的必要装备。它们形式多样,某些是显式的,某些是隐式的。某些是双向的,某些是单向的。JVM利用这些形式在所有平台中有效地支持 Java内存模型。内存屏障,又称内存栅栏,是一组处理器指令,用于实现对内存操作的顺序限制。本文介绍了内存屏障对多线程程序的影响。(在使用synchronzied或者volatile等时,就会产生内存屏障,保证可见性等。)内存屏障为何重要?对主存的一次访问一...原创 2018-04-22 10:09:37 · 734 阅读 · 0 评论 -
5.JVM方法区
JAVA虚拟机方法区介绍1、JVM内存模型 大多数JVM将内存分配为Method Area(方法区)、Heap(堆)、ProgramCounter Register(程序计数器)、JAVA MethodStack(JAVA方法栈)、Native MethodStack(本地方法栈)。1.1 Method Area 线程共享,存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后...原创 2018-04-14 14:38:22 · 2827 阅读 · 1 评论 -
10.JDK8和9的新特性
· 如果你使过几年Java,你就知道针对集合类,最常见的操作就是进行迭代,并将业务逻辑应用于各个元素,例如处理订单、交易和事件的列表。由于Java是命令式语言,Java 8之前的所有循环代码都是顺序的,即可以对其元素进行并行化处理。如果你想做并行过滤,就需要自己写代码,这并不是那么容易。通过引入lambda表达式和默认方法,将做什么和怎么做的问题分开了,这意味着Java集合现在知道怎样做...原创 2018-03-09 17:26:52 · 4639 阅读 · 0 评论 -
8.JVM的垃圾回收机制
java7之前,方法区位于永久代(PermGen),永久代和堆相互隔离,永久代的大小在启动JVM时可以设置一个固定值,不可变; java7中,static变量从永久代移到堆中; java8中,取消永久代,方法存放于元空间(Metaspace),元空间仍然与堆不相连,但与堆共享物理内存,逻辑上可认为在堆中GC通过确定对象是否被活动对象引用来确定是否收集该对象。JVM内存由几个部分组成:堆、方法区、...原创 2018-03-08 11:27:38 · 792 阅读 · 0 评论 -
3.JVM类加载机制之类加载器
JVM设计者把类加载阶段中的“通过'类全名'来获取定义此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 1.类与类加载器对于任何一个类,都需要由加载它的类加载器和这个类来确立其在JVM中的唯一性。也就是说,两个类来源于同一个Class文件,并且被同一个类加载器加载,这两个类才相等。2.双亲委派模型从虚拟机...原创 2018-03-07 18:40:04 · 216 阅读 · 0 评论 -
2.JVM类加载机制之类加载过程
类加载机制概念 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、准备、解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的加载机制。*Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Cla...原创 2018-03-07 17:12:36 · 243 阅读 · 0 评论 -
14.JVM调优
1.数据类型 java虚拟机中,数据类型可以分为两类:基本类型和引用类型。 基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值。 “引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。 基本类型包括:byte、short、int、long、char、float、double、boolean 引用类型...原创 2018-05-05 15:13:54 · 263 阅读 · 0 评论