JVM
文章平均质量分 75
JVM
钦拆大仁
这个作者很懒,什么都没留下…
展开
-
JVM第十二篇-执行引擎
执行引擎概述执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM所识原创 2021-01-12 16:09:40 · 83 阅读 · 0 评论 -
JVM第十一篇-直接内存
直接内存不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存通常访问直接内存的速度会优于Java堆,即读写性能高。出于性能考虑读写频繁的场合可能会考虑使用直接内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲区非直接缓冲区读写文件需要与磁盘交互,需要由用户态切换到内核态。在内核态时,需要内存如下图操作。使用IO原创 2021-01-05 16:54:49 · 118 阅读 · 0 评论 -
JVM第十篇-对象的实例化内存布局与访问定位
1、对象的实例化对象创建的方式new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法 Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器,并且权限必须为 public Constructor的newInstance(Xxxx):反射的方式,可以调用空参的,或者带参的构造器 使用clone():不调用任何的构造器,要求当前的类需要实现Cloneable接口中的clone方法 使用序列化:序列化一般用原创 2021-01-05 16:12:01 · 74 阅读 · 0 评论 -
JVM第九篇-方法区
1、栈、堆、方法区的交互关系内存结构上来看从线程共享角度来看ThreadLocal用来保证多个线程在并发环境下的安全性。典型应用就是数据库连接管理,以及独立会话管理。栈堆方法区的交互关系Person 类的 .class 信息存放在方法区中 person 变量存放在 Java 栈的局部变量表中 真正的 person 对象存放在 Java 堆中 在 person 对象中,有个指针指向方法区中的 person 类型数据,表明这个 person 对象是用方法区中的 Per.原创 2020-12-09 13:56:59 · 127 阅读 · 0 评论 -
JVM第八篇-堆
1、堆的核心概述什么是堆内存堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了,堆是JVM管理的最大一块内存空间,并且堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(原创 2020-12-02 16:51:05 · 97 阅读 · 0 评论 -
JVM第七篇-本地方法栈
Java虚拟机栈于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。本地方法栈,也是线程私有的。允许被实现成固定或者是可动态扩展的内存大小(在内存溢出方面和虚拟机栈相同)如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个stackoverflowError 异常。如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Java虚拟机将会抛出一个outofMemoryError异常原创 2020-12-02 09:52:23 · 70 阅读 · 0 评论 -
JVM第六篇-本地方法接口
1、什么是本地方法简单地讲,一个Native Method是一个Java调用非Java代码的接囗一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern 告知C++编译器去调用一个C的函数。“A native method is a Java method whose implementation is provided by non-java code.”原创 2020-12-02 09:24:22 · 147 阅读 · 0 评论 -
JVM第五篇-虚拟机栈
1、虚拟机栈的基础内容概述由于跨平台的设计,java的指令都是根据栈来设计的,不同平台CPU架构不同所以不能设计为基于寄存器。优点跨平台,指令集小,编译器容易实现,缺点性能下降,实现同样的功能需要更多指令。JVM内存结构可以粗略的理解为堆(heap)和栈(stack)栈是运行时单位,堆是存储单位即:栈解决的是程序的运行问题,程序如何运行,如何处理数据。堆解决的是程序的存储问题,数据怎么放,放在哪。简介虚拟机栈是什么Java虚拟机栈(Java Virtual Machi原创 2020-12-01 22:37:46 · 91 阅读 · 0 评论 -
JVM第四篇-程序计数器(PC寄存器)
1原创 2020-11-27 10:13:52 · 114 阅读 · 0 评论 -
JVM第三篇-运行时数据区概述及线程
1、概述内存是非常重要的系统资源,是硬盘和CPU的中间仓库以及桥梁,承载着操作系统和应用程序的实时运行,JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效运行。不同JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。Java虚拟机定义了若干种程字运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毀,另外一些则是与线程一一对应的,这些与线程对应的数据区域会隨着线程开始.原创 2020-11-25 15:09:07 · 67 阅读 · 0 评论 -
JVM第二篇-类加载子系统
1、类加载过程JVM架构图1.1类加载子系统类加载子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)1.2类加载器ClassLoader角色.原创 2020-11-25 14:46:25 · 126 阅读 · 0 评论 -
JVM第一篇-JVM与java体系结构
1、JavaJava是目前应用最为广泛的软件开发平台之一随着Java以及Java社区的不断壮大,Java也早已不再是是一个门编程需要了,它更是一个平台、一种文化、一个社区作为一个平台,Java虚拟机扮演者举足轻重的作用,Groovy,Scala,JRuby,Kotlin等都是Java平台的一部分作为一种文化,Java几乎成为可“开源”的代名词,第三方开源软件和框架 如Tomcat Spring全家桶 Mybatis等,JDK和JVM本身也有不少开源的实现,如OpenJDK、Apache Ha原创 2020-11-25 11:05:44 · 204 阅读 · 0 评论