JVM(二)JVM内存布局】的更多相关文章

欢迎关注公众号:bin的技术小屋 大家好,我是bin,又到了每周我们见面的时刻了,我的公众号在1月10号那天发布了第一篇文章<从内核角度看IO模型的演变>,在这篇文章中我们通过图解的方式以一个C10k的问题为主线,从内核角度详细阐述了5种IO模型的演变过程,以及两种IO线程模型的介绍,最后引出了Netty的网络IO线程模型.读者朋友们后台留言都觉得非常的硬核,在大家的支持下这篇文章的目前阅读量为2038,点赞量为80,在看为32.这对于刚刚诞生一个多月的小号来说,是一种莫大的鼓励.在这里bin…
目录 1 JVM的内存区域布局 2 JVM五大数据区域介绍 3 JVM运行时内存布局和JMM内存模型区别 4 JMM内存模型交互操作 欢迎指正文中错误 关注公众号,一起交流 参考文章 1 JVM的内存区域布局 java代码的执行步骤有三点 java源码文件->编译器->字节码文件 字节码文件->JVM->机器码 机器码->系统CPU执行 JVM执行的字节码需要用类加载来载入:字节码文件可以来自本地文件,可以在网络上获取,也可以实时生成.就是说你可以跳过写java代码阶段,直接…
2.1 C.C++内存管理是由开发人员管理,而Java则交给了JVM进行自动管理 2.2 JVM运行时数据区:方法区.堆(运行时线程共享),虚拟机栈.本地方法栈.程序计数器(运行时线程隔离,私有) 1.程序计数器(Program Counter Register):每一个线程都独有一个程序计数器,并且分配了一块线程私有的小块内存,程序运行时,这个计数器会记录字节码文件运行的行数,当线程切换时,则通过这个行数继续执行下面的操作 2.虚拟机栈(Java Virtual Machine Stacks)…
栈内存是描述java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表.操作数栈.动态链接.返回出口等信息.每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程.栈帧(Frame)是用来存储数据和部分过程结果的数据结构,同时也被用来处理动态链接(Dynamic Linking).方法返回值和异常分派(Dispatch Exception).栈帧随着方法调用而创建,随着方法结束而销毁——无论方法是正常完成还是异常完成(抛…
很多人一提到锁,自然第一个想到了synchronized,但一直不懂源码实现,现特地追踪到C++层来剥开synchronized的面纱. 网上的很多描述大都不全,让人看了不够爽,看完本章,你将彻底了解synchronized的核心原理. 一.启蒙知识预热 开启本文之前先介绍2个概念 1.1.cas操作 为了提高性能,JVM很多操作都依赖CAS实现,一种乐观锁的实现.本文锁优化中大量用到了CAS,故有必要先分析一下CAS的实现. CAS:Compare and Swap. JNI来完成CPU指令的…
注:本文篇幅较长,且需要有一定的java基础,建议各位看官,备好瓜子.饮料.小板凳,摆个让自己舒服的姿势,慢慢细看^_^, 文中所有素材,均来自互联网,本人只是详细梳理了一遍,形成此文. 一.JVM运行时内存布局 按java 8虚拟机规范的原始表达:(jvm)Run-Time Data Areas, 暂时翻译为"jvm运行时内存布局". 从概念上大致分为6个(逻辑)区域,参考下图(注:Method Area中还有一个常量池区,图中未明确标出) 这6块区域按是否被线程共享,可以分为二大类…
一.JVM运行时内存布局 按java 8虚拟机规范的原始表达:(jvm)Run-Time Data Areas, 暂时翻译为"jvm运行时内存布局". 从概念上大致分为6个(逻辑)区域,参考下图(注:Method Area中还有一个常量池区,图中未明确标出) 这6块区域按是否被线程共享,可以分为二大类: 一类是每个线程所独享的: 1. PC Register:也称为程序计数器, 记录每个线程当前执行的指令信息(eg:当前执行到哪一条指令,下一条该取哪条指令) 2. JVM Stack:…
JVM(十一):内存分配 在前面的章节中,我们花了大量的篇幅去介绍 JVM 内的内存布局.对象在内存中的状态.垃圾回收的算法和具体实现等.今天让我们探讨一下对象是如何分配内存的. 堆内存划分 前面说过,从内存回收的角度来看,堆被分为以下几个部分: 开始创建的对象大多都会直接分配到新生代一块区域中,只有大对象和经过多次 GC 后依然存活的对象会放置在老年代中. 那么一个对象在被创建出来后,何时存在与哪个内存区域中呢,其具体的分配策略又是什么呢?下面就让我们一起来看一下几个具体的内存分配策略,了解一…
对于 Java 虚拟机,我们都知道其内存区域划分成:堆.方法区.虚拟机栈等区域.但一个对象在 Java 虚拟机中是怎样存储的,相信很少人会比较清楚地了解.Java 对象在 JVM 中的内存布局,是我们了解并发编程同步机制的基础. 在 HotSpot 虚拟机中,对象在内存中存储的布局可以分为 3 块区域:对象头(Header).实例数据(Instance Data)和对齐填充(Padding). 对象头 HotSpot 虚拟机的对象头包括两部分信息,第一部分用于存储自身运行时的数据,第二部分用于存…
一.对象内存查看工具 VS 编译器 CL 的一个编译选项可以查看 C++ 类的内存布局,非常有用.使用如下,从开始程序菜单找到 Visual Stdio 2012. 选择 VS 的命令行工具,按如下格式使用: >cl /d1reportSingleClassLayout[classname] test.cpp 而使用 /d1reportAllClassLayout 则可以查看源文件中所有类及结构体的内存布局. 其中,classname 为类名,cl /d1reportSingleClassLay…