1. 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的更多相关文章

  1. 【转】 Java虚拟机内存的堆区(heap),栈区(stack)和静态区(static/method)

    JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令 ...

  2. 实战java虚拟机的学习计划图(看懂java虚拟机)

    啥也不说了,实战java虚拟机,好好学习,天天向上!针对自己的软肋制定学习计划. 一部分内容看完,自己做的学习笔记和感想. 学java很简单,但懂java会有难度,如果你的工资还没超过1W,那是时候深 ...

  3. 带着新人看java虚拟机01

    1.前言(基于JDK1.7) 最近想把一些java基础的东西整理一下,但是又不知道从哪里开始!想了好久,还是从最基本的jvm开始吧!这一节就简单过一遍基础知识,后面慢慢深入... 水平有限,我自己也是 ...

  4. 保姆级别的RabbitMQ教程!一看就懂!(有安装教程,送安装需要的依赖包,送Java、Golang两种客户端教学Case)

    保姆级别的RabbitMQ教程!一看就懂!(有安装教程,送安装需要的依赖包,送Java.Golang两种客户端教学Case)   目录 什么是AMQP 和 JMS? 常见的MQ产品 安装RabbitM ...

  5. 带着新人看java虚拟机04(多线程篇)

    我记得最开始接触多进程,多线程这一块的时候我不是怎么理解,为什么要有多线程啊?多线程到底是个什么鬼啊?我一个程序好好的就可以运行为什么要用到多线程啊?反正我是十分费解,即使过了很长时间我还是不是很懂, ...

  6. 带着新人看java虚拟机03

    分享一篇博客:https://blog.csdn.net/yfqnihao/article/details/8289363,本篇有部分参考这篇博客!!! 还是继续说一下java虚拟机,为什么呢?因为我 ...

  7. 《深入理解Java虚拟机》-----第8章 虚拟机字节码执行引擎——Java高级开发必须懂的

    概述 执行引擎是Java虚拟机最核心的组成部分之一.“虚拟机”是一个相对于“物理机”的概念 ,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器.硬件.指令集和操作系统层面上的,而 ...

  8. 《深入理解Java虚拟机》-----第7章 虚拟机类加载机制——Java高级开发必须懂的

    代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步. 7.1 概述 上一章我们了解了Class文件存储格式的具体细节,在Class文件中描述的各种信息,最终都需要 ...

  9. Java虚拟机系列一:一文搞懂 JVM 架构和运行时数据区

    前言 之前写博客一直比较随性,主题也很随意,就是想到什么写什么,对什么感兴趣就写什么.虽然写起来无拘无束,自在随意,但也带来了一些问题,每次写完一篇后就要去纠结下一篇到底写什么,看来选择太多也不是好事 ...

随机推荐

  1. select模块(I/O多路复用)

    0709自我总结 select模块 一.介绍 Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持 ...

  2. MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

    之前我们详细介绍过分布视图(partial view),在有一些更加复杂的场景下,.net core为我们提供了更加强大的组件 view  component, 可以认为view component是 ...

  3. SpringBoot2.1.6 + Shiro1.4.1 + Thymeleaf + Jpa整合练习

    首先,添加maven依赖,完整的pom文件如下: <?xml version="1.0" encoding="UTF-8"?> <projec ...

  4. 如何在Windows上使用Python进行开发

    本文由葡萄城技术团队于原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 一直以来C#都是微软在编程语言方面最为显著的Tag,但时至今日Python ...

  5. C#托盘程序设置

    打开Microsoft Visual Studio 2010,新建解决方案--添加项目--托盘的实现     从工具栏里,把NotifyIcon控件拖到窗体上,并设置属性: 1.visible 设置默 ...

  6. 浅谈JMM

    概述 JMM的全称是Java Memory Model(Java内存模型) JMM的关键技术点都是围绕着多线程的原子性.可见性和有序性来建立的,这也是Java解决多线程并行机制的环境下,定义出的一种规 ...

  7. 【Android Studio】使用 Genymotion 调试出现错误 INSTALL_FAILED_CPU_ABI_INCOMPATI

    RT -- 解决方法参考: https://my.oschina.net/u/242764/blog/375909 http://blog.csdn.net/wjr2012/article/detai ...

  8. Mac 使用小结

    小白使用 Mac 的点点滴滴总结,更新中…… 1. 显示/隐藏 文件的命令: a) 显示文件: defaults write com.apple.finder AppleShowAllFiles -b ...

  9. 中国地区表SQL语句

    /* Navicat MySQL Data Transfer Source Server : 本机 Source Server Version : 50553 Source Host : localh ...

  10. HttpsUtils

    package io.renren.modules.jqr.util; import java.io.BufferedReader; import java.io.InputStream; impor ...