Java虚拟机一看就懂01
Jvm内存结构
---线程隔离区域说明:
1.1、程序计数器
- 线程私有
- 是一块内存空间
唯一的一个在Java虚拟机规范中没有规定任何OOM情况的区域(不会OOM?)
1.2、Java虚拟机栈
- 线程私有
- 声明周期与线程相同
在Java虚拟机规范中规定两种异常状况:
1、线程的栈深度大于虚拟机所允许,抛出StackOverflowError异常;
2、如果虚拟机栈可以动态扩展,当扩展到无法申请足够的内存,抛出OOM
PS:每一个方法在执行的同时都会创建一个栈帧(Stack Frame),用于存储局部变量表、操作数栈、动态链接、方法出口等信息,每一个方法从调用到完成,就对应着一个栈帧从入栈到出栈的过程1.3、本地方法栈
- 线程私有
- 声明周期与线程相同
在Java虚拟机规范中规定两种异常状况:
1、线程的栈深度大于虚拟机所允许,抛出StackOverflowError异常;
2、如果虚拟机栈可以动态扩展,当扩展到无法申请足够的内存,抛出OOM
PS:可以看出本地方法栈和Java虚拟机栈的特征基本一致。
区别是:Java虚拟机栈为执行Java方法服务,而本地方法栈为Native方法服务。
线程共享区域说明:
1.4、Java堆
- 线程共享
- 存放对象实例
- 虚拟机内存中最大的一块
- 逻辑连续,物理不需要连续
- 存在OOM
是Java垃圾回收主要的区域
1.5、方法区
- 线程共享
- 存储被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码
- ≈永久代(Permanent Generation)本质不等价
- 不需要连续内存
- 存在垃圾回收,但是回收区域仅限于常量池和类型的卸载
存在OOM
好了,第一部分就这么讲完了,其实就这么些内容,后面会继续深入,慢慢来,不急不难
其实很多时候,我们只需要鱼,而不是渔,呐,给你鱼。
关注公众号 watermelon_code 获取第一手的满足~
TO BE CONTINUE !
Java虚拟机一看就懂01的更多相关文章
- 【转】 Java虚拟机内存的堆区(heap),栈区(stack)和静态区(static/method)
JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令 ...
- 实战java虚拟机的学习计划图(看懂java虚拟机)
啥也不说了,实战java虚拟机,好好学习,天天向上!针对自己的软肋制定学习计划. 一部分内容看完,自己做的学习笔记和感想. 学java很简单,但懂java会有难度,如果你的工资还没超过1W,那是时候深 ...
- 带着新人看java虚拟机01
1.前言(基于JDK1.7) 最近想把一些java基础的东西整理一下,但是又不知道从哪里开始!想了好久,还是从最基本的jvm开始吧!这一节就简单过一遍基础知识,后面慢慢深入... 水平有限,我自己也是 ...
- 保姆级别的RabbitMQ教程!一看就懂!(有安装教程,送安装需要的依赖包,送Java、Golang两种客户端教学Case)
保姆级别的RabbitMQ教程!一看就懂!(有安装教程,送安装需要的依赖包,送Java.Golang两种客户端教学Case) 目录 什么是AMQP 和 JMS? 常见的MQ产品 安装RabbitM ...
- 带着新人看java虚拟机04(多线程篇)
我记得最开始接触多进程,多线程这一块的时候我不是怎么理解,为什么要有多线程啊?多线程到底是个什么鬼啊?我一个程序好好的就可以运行为什么要用到多线程啊?反正我是十分费解,即使过了很长时间我还是不是很懂, ...
- 带着新人看java虚拟机03
分享一篇博客:https://blog.csdn.net/yfqnihao/article/details/8289363,本篇有部分参考这篇博客!!! 还是继续说一下java虚拟机,为什么呢?因为我 ...
- 《深入理解Java虚拟机》-----第8章 虚拟机字节码执行引擎——Java高级开发必须懂的
概述 执行引擎是Java虚拟机最核心的组成部分之一.“虚拟机”是一个相对于“物理机”的概念 ,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器.硬件.指令集和操作系统层面上的,而 ...
- 《深入理解Java虚拟机》-----第7章 虚拟机类加载机制——Java高级开发必须懂的
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步. 7.1 概述 上一章我们了解了Class文件存储格式的具体细节,在Class文件中描述的各种信息,最终都需要 ...
- Java虚拟机系列一:一文搞懂 JVM 架构和运行时数据区
前言 之前写博客一直比较随性,主题也很随意,就是想到什么写什么,对什么感兴趣就写什么.虽然写起来无拘无束,自在随意,但也带来了一些问题,每次写完一篇后就要去纠结下一篇到底写什么,看来选择太多也不是好事 ...
随机推荐
- select模块(I/O多路复用)
0709自我总结 select模块 一.介绍 Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持 ...
- MVC+EFCore 完整教程18 -- 升级分布视图至 View Component
之前我们详细介绍过分布视图(partial view),在有一些更加复杂的场景下,.net core为我们提供了更加强大的组件 view component, 可以认为view component是 ...
- SpringBoot2.1.6 + Shiro1.4.1 + Thymeleaf + Jpa整合练习
首先,添加maven依赖,完整的pom文件如下: <?xml version="1.0" encoding="UTF-8"?> <projec ...
- 如何在Windows上使用Python进行开发
本文由葡萄城技术团队于原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 一直以来C#都是微软在编程语言方面最为显著的Tag,但时至今日Python ...
- C#托盘程序设置
打开Microsoft Visual Studio 2010,新建解决方案--添加项目--托盘的实现 从工具栏里,把NotifyIcon控件拖到窗体上,并设置属性: 1.visible 设置默 ...
- 浅谈JMM
概述 JMM的全称是Java Memory Model(Java内存模型) JMM的关键技术点都是围绕着多线程的原子性.可见性和有序性来建立的,这也是Java解决多线程并行机制的环境下,定义出的一种规 ...
- 【Android Studio】使用 Genymotion 调试出现错误 INSTALL_FAILED_CPU_ABI_INCOMPATI
RT -- 解决方法参考: https://my.oschina.net/u/242764/blog/375909 http://blog.csdn.net/wjr2012/article/detai ...
- Mac 使用小结
小白使用 Mac 的点点滴滴总结,更新中…… 1. 显示/隐藏 文件的命令: a) 显示文件: defaults write com.apple.finder AppleShowAllFiles -b ...
- 中国地区表SQL语句
/* Navicat MySQL Data Transfer Source Server : 本机 Source Server Version : 50553 Source Host : localh ...
- HttpsUtils
package io.renren.modules.jqr.util; import java.io.BufferedReader; import java.io.InputStream; impor ...