JVM笔记(二)JVM基本结构
JVM基本结构
一、运行时内存区域
java虚拟机所管理的内存将会包括以下几个运行时内存区域。

1.程序计数器
Program Counter Register:可以看作当前线程(线程私有)所执行的字节码行号指示器。
2.Java虚拟机栈
Java Virtual Machine Stacks:也是线程私有的,描述了Java方法执行的内存模型:每个方法在执行时都会创建一个栈帧用于存储---局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用到执行完毕的过程,都对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
局部变量表:存放了方法内部编译期可知的各种基本数据类型,对象引用类型。





在虚拟机规范中,虚拟机栈规定了两种异常情况:
1)StackOverflowError:线程请求栈的深度大于虚拟机所允许的深度。
2)OutOfMemoryError:虚拟机动态时,无法申请到足够的内存。
3.本地方法栈
与虚拟机栈的方法栈作用相似,只是本地方法栈为虚拟机使用的Native方法服务。可抛出虚拟机栈相同的异常。
4.Java堆
Java Heap:被所有线程共享的一块内存区域,在虚拟机启动时创建。用于存放对象实例和数组。是Java垃圾收集器所管理的主要区域,因此也被称为“GC堆”。Java虚拟机规定,Java堆可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可。
可以抛出OutOfMemory异常。
5.方法区
Method Area:线程共享区域,用于存放已经被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等信息。虚拟机规范把方法区描述为堆的一个逻辑部分。
6.运行时常量池
Runtime Constant Pool:方法区的一部分,Class文件中的常量池(用于存放编译期生成的各种字面量和符号引用)中的内容,在类加载后进入方法区中的常量池存放(也可将运行期间新产生的常量放入池中)。
7.直接内存
在JDK 1.4中新加入了NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。 这样能在一些场景中显著提高性能,因为避免了在Java堆和Native堆中来回复制数据。
二、JVM内存模型

public class VolatileStopThread extends Thread{
private volatile boolean stop=false;
public void stopIt(){
stop=true;
}
@Override
public void run(){
int i=0;
while (!stop){
i++;
}
System.out.println("Stoped running");
}
}
public class MainClass {
public static void main(String[] args) {
//没有volatile -server运行无法停止
//虽然很多情况下volatile性能比锁好但不能代替锁
//因为volatile不是线程安全的
VolatileStopThread v=new VolatileStopThread();
v.start();
try {
Thread.sleep(1000);
v.stopIt();
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}


线程内有序意思是:在本线程内的变量什么的编译器是会考虑语义的。


JVM笔记(二)JVM基本结构的更多相关文章
- muduo学习笔记(二)Reactor关键结构
目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...
- jvm系列(二):JVM内存结构
JVM内存结构 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能 ...
- JVM笔记(二) 垃圾收集器(1)
垃圾收集器 主要通过阅读<深入了解Java虚拟机>(周志明 著)和网络资源汇集而成,为本人学习JVM的笔记.同时,本文理论基于JDK 1.7版本,暂不考虑 1.8和1.9 的新特性,但可能 ...
- jVM笔记4-对象的结构
1.对象的结构有: 1.Header(对象头),其组成主要有两部分: 1.自身运行时的数据(Mark Word),包括: 1.哈希值 2.GC分代年龄. 3.锁状态标志 4.线程所持有的锁 5.偏向线 ...
- C#学习笔记二:C#程序结构
从最简单的HelloWorld开始入手,这是一个最低限度的C#程序结构. C# Hello World 示例 一个C#程序主要由以下几部分组成: 命名空间声明 一个类 类方法 类属性 一个Main方法 ...
- Android Studio安卓学习笔记(二)Android项目结构
上一篇代码,我们学习了Android的功能以及如何用Android Studio开发第一个安卓程序.下面就要介绍Android项目结构.为日后学习打基础. 一:Android项目结构 打开MyFris ...
- JVM(二)Java虚拟机组成详解
导读:详细而深入的总结,是对知识"豁然开朗"之后的"刻骨铭心",想忘记都难. Java虚拟机(Java Virtual Machine)下文简称jvm,上一篇我 ...
- jvm系列(七):jvm调优-工具篇
16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化.工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗 ...
- jvm系列(八):jvm知识点总览-高级Java工程师面试必备
在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功.对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后 ...
- jvm系列(四):jvm知识点总结
原文链接:http://www.cnblogs.com/ityouknow/p/6482464.html jvm 总体梳理 jvm体系总体分四大块: 类的加载机制 jvm内存结构 GC算法 垃圾回收 ...
随机推荐
- poj2441状态压缩dp基础
/* 给定n头牛,m个谷仓,每头牛只能在一些特定的谷仓,一个谷仓只能有一头牛 问可行的安排方式 dp[i][j]表示前i头牛组成状态j的方案数,状态0表示无牛,1表示有牛 使用滚动数组即可 枚举到第i ...
- 把tomcat服务器配置为windows服务的方法
转自:http://ykyfendou.iteye.com/blog/2032916 使用tomcat开发的项目,我们把项目交付给客户的时候,客户都不希望在每次开机的时候都要启动一下tomcat服务器 ...
- C#的值传递与引用传递
值传递:在使用值传递时,是把变量的值传给函数,函数中对此变量的任何修改都不影响该变量本身的值. 引用传递:使用引用传递时,在函数中对此变量的修改会影响变量的值. 说简单点,值传递,就是我把身份证复印件 ...
- Python - 去除list中的空字符
list1 = ['122', '2333', '3444', '', '', None] a = list(filter(None, list1)) # 只能过滤空字符和None print(a) ...
- Linux网络编程目录
基本TCP套接字编程 1. 套接字API 简单的回射服务器 TCP:IO多路复用 1. 函数select.poll 2.函数epoll
- Redis托管Session
一:redis托管session主要是为了不同域之间共享session.Asp.net提供了四种处理Session的方法 1. InProc模式 这是ASP.NET默认的Session管理模式,在应 ...
- [转] JavaScript 之 ArrayBuffer
JS里的ArrayBuffer 还记得某个晚上在做 canvas 像素级操作,发现存储像素的数据格式并不是Array类型,而是ArrayBuffer,心想这是什么鬼?后来查了一些资料,发现自己这半年来 ...
- Centos7编译安装GCC7.2
通常编译的时候可能需要新版本的gcc,本文就说明下基于低版本的gcc升级为gcc7.2 wget 'http://mirrors-usa.go-parts.com/gcc/releases/gcc-7 ...
- [HNOI2007]梦幻岛宝珠
题解: 一道比较好的题目 首先比较显然的就是我们要按照a*2^b的b的顺序来枚举 那么状态f[i][j]表示当前在b,用了a*2^b 刚开始没想到怎么不同层之间搞 看了题解发现非常简单 由于每一层到最 ...
- 利用vcard和qrcode.js生成二维码导入联系人
vCard是一种容许交换个人信息的数据规范,vCard数据格式的标识符是VCARD,vCard数据格式行是: 类型 [;参数]:值,具体的介绍百度都有,我们可以通过vcard来进行通讯录的保存,名片的 ...