10.JVM —— 方法区
方法区 前言 从线程共享与否的角度来看 如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及会话管理 栈、堆、方法区的交互关系 下面就涉及了对象的访问定位 Person: 存放在元空间,也可以说方法区 person: 存放在Java栈的局部变量表中 new Person(): 存放…
Writing topic
沿着这个关键词,继续往里看。
方法区 前言 从线程共享与否的角度来看 如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及会话管理 栈、堆、方法区的交互关系 下面就涉及了对象的访问定位 Person: 存放在元空间,也可以说方法区 person: 存放在Java栈的局部变量表中 new Person(): 存放…
堆 堆的核心概念 堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但进程包含多个线程,他们是共享同一堆空间的。 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 Java堆区在JVM启动的时候即被创建,其空间的大小也就确定了,是JVM管理的最大一块内存空间。 堆内存…
本地方法接口 什么是本地方法 简单的讲,一个 是一个Java调用非Java代码的接口。一个Native Method是这样一个Java方法,该方法的实现由非Java语言实现,比如C。这个特征并非Java所持有,很多其他的编程语言,都有这一机制,比如C++中,你可以用extern “c “告知编译器去…
虚拟机栈 虚拟机栈概述 由于跨平台的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。 有不少Java开发人员一提到Java内存结构,就会非常粗粒度的将JVM中的内存区理解…
程序计数器 介绍 JVM中的 中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有吧数据装在寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC寄存器(或指令寄存器)会更加贴切(也称为程序钩子),并且不容易引起一些不必要的误会。JVM中的PC寄存…
运行时数据区概述及线程 前言 本节主要讲的是运行时数据区,也就是下图这部分,他是类加载完成后的阶段 当我们通过前面的:类的 加载- 验证- 准备- 解析- 初始化 这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区。 也就是大厨做饭,我们把大厨后面的东西(切…
类加载子系统 概述 完整图如下 如果自己想手写一个Java虚拟机的话,主要考虑哪些结构呢? 类加载器 执行引擎 类加载器子系统作用 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。 ClassLoader只负责class文件的加载,至于他是否可以运…
概述 在 Java 中,JVM 可以理解的代码就叫做 (即扩展名为 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不针对一种…
本文导火索 当需要排查各种内存溢出问题、当垃圾收集成为系统达到更高并发的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。 JVM内存分配与回收 Java的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时,Java自动内存管理最核心的功能是堆内存中对象的分配与回收。 Java堆…
概述 对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题,看起来由虚拟机管理内存一切都很美好。不过,也正是因为Java程序员把控制内存的权力交给了Java虚拟机,一旦出现内存泄漏和溢出方面的问题,…