理解JVM模型
概括
JVM运行时数据区可以划分为5部分,分别是:程序计数器、虚拟机栈、本地方法栈、堆、方法区
程序计数器(Program Counter Register)
相当于当前线程所执行字节码的行号指示器。
程序计数器是线程隔离的。
程序计数器区域是以上五个区域中唯一一个不会报OutOfMemoryError的区域。
虚拟机栈(VM Stack)
每个方法在执行时都会创建一个栈桢(存放局部变量表,操作数栈等),每个方法的嗲欧勇和执行完成,就代表着栈桢在虚拟机栈中入栈和出栈的过程。简单地说,虚拟机栈就是为JVM执行java方法(字节码)的区域。
虚拟机栈是线程隔离的。
当线程请求的栈深度大于虚拟机栈的深度时,StackOverFlowError。
当虚拟机栈需要扩展且无法申请到足够内存时,OutOfMemoryError。
本地方法栈(Native Method Stack)
类似于虚拟机栈的解释,简单说本地方法栈就是为JVM提供Native方法服务。
Native方法:java程序调用非java语言实现的接口,比如底层的一些驱动硬件的接口,以C语言实现。
堆(Heap)
存放实例对象以及数组,可划分为Eden,From Survivor,To Survivor。在物理内容上可以是不连续的,堆是可扩展的(-xmm,-xms参数),当堆中无空间来为实例对象分配内存且堆无法扩展空间时,OutOfMemoryError。
方法区(Method Area)
存储JVM的类加载信息、常量、静态变量等,又称为Non-Heap,常量池也为方法区的一部分。
___
附上一张HotSpot模型图

理解JVM模型的更多相关文章
- 如何从编程的本质理解JVM内存模型
如何从编程的本质理解JVM内存模型 一般聊JVM内存模型都是把图截出来,然后对着图,解释上面堆.栈之类的概念.这篇将分享下,如何从编程的本质上理解,JVM内存模型是什么样子,为什么是这个样子,不再死记 ...
- [转帖]JVM—深入理解内存模型与垃圾收集机制
JVM—深入理解内存模型与垃圾收集机制 https://juejin.im/post/5d68dc9ee51d4561ad6548f7 前言 Java是一种跨平台的语言,当初其设计初衷也是为了解决各个 ...
- 【深入理解JVM】类加载器与双亲委派模型 (转)
出处: [深入理解JVM]类加载器与双亲委派模型 加载类的开放性 类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因.在类加载的第一阶段“加载”过程中,需要通过 ...
- 轻松理解JVM的分代模型
前言 上篇文章我们一起对jvm的内存模型有了比较清晰的认识,小伙伴们可以参考JVM内存模型不再是秘密这篇文章做一个复习. 本篇文章我们将针对jvm堆内存的分代模型做一个详细的解析,和大家一起轻松理解j ...
- 深入理解JVM(一)类加载器部分:双亲委派模型
类加载器的父亲委托机制 在父亲委托机制中,各个类加载器按照父子关系形成了树形结构,除了根类加载器之外,其余的类加载器都有且只有一个父加载器. 先让最顶层可以加在的父加载器加栽(所有可加载的加载器中,处 ...
- 深入理解JVM内幕(转)
转自:http://blog.csdn.net/zhoudaxia/article/details/26454421/ 每个Java开发者都知道Java字节码是执行在JRE((Java Runtime ...
- 深入理解JVM内幕:从基本结构到Java 7新特性
转自:http://www.importnew.com/1486.html 每个Java开发者都知道Java字节码是执行在JRE((Java Runtime Environment Java运行时环境 ...
- [译]深入理解JVM
深入理解JVM 原文链接:http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals 每个使用Java的开发者都知道Java ...
- 走进JVM【二】理解JVM内存区域
引言 对于C++程序员,内存分配与回收的处理一直是令人头疼的问题.Java由于自身的自动内存管理机制,使得管理内存变得非常轻松,不容易出现内存泄漏,溢出的问题. 不容易不代表不会出现问题,一旦内存泄漏 ...
随机推荐
- [整理]x=x++和x=++x
最近看java面试题,再次遇到x=x++,之前一直按照C语言中对自增运算符++的解释去理解.殊不知自己犯了严重的错误. (1)不同的语言的编译器,会导致相同的代码最终执行的结果不确定; (2)而且就算 ...
- RPC笔记之初探RPC:DIY简单RPC框架
一.什么是RPC RPC(Remote Procedure Call)即远程过程调用,简单的说就是在A机器上去调用B机器上的某个方法,在分布式系统中极其常用. rpc原理其实很简单,比较容易理解,在r ...
- usb的一些网址
一些关于usb的帖子.网址: usb gadget device g_ether.ko 做成usbnetwork http://bbs.csdn.net/topics/370120345 Linux ...
- mac安装sentry
最近需要一个日志监视系统所以选择了sentry. 安装docker https://download.docker.com/mac/stable/Docker.dmg 登录 安装完了打开 会提示登录输 ...
- sass和scss相关知识
参考地址:http://www.imooc.com/learn/311 什么是css预处理器? CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些编程的特性 ...
- 关于overflow: hidden;的一个诡异问题
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- MongoDB学习笔记-1
mongod --dbpath D:\MogonDB3.4.10\db //开启数据库,无端口号mongod --dbpath D:\MogonDB3.4.10\db --port=10086 //开 ...
- Top 10 Best Free Netflow Analyzers and Collectors for Windows
https://www.pcwdld.com/best-free-netflow-analyzers-and-collectors-for-windows https://blog.csdn.net/ ...
- 图学ES6-5.正则的扩展
- 【PAT】1051 Pop Sequence (25)(25 分)
Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...