一、java的体系构成:

Java的技术体系主要由支撑java程序运行的虚拟机、提供各种开发领域接口支持的java api、java编程语言及许多第三方java框架(如Spring 、Struts等)构成。

二、JDK与JRE的区别:

Java程序设计语言,java虚拟机和java API类库这三部分统称为JDK,是用于支持java程序开发的最小环境。

把Java API类库中的java SE API 子集和java虚拟机这两部分统称JRE,JRE是支持java程序运行的标准环境。

三、未来发展:

Java未来的发展方向:模块化、混合语言、多核并行

四、Java内存区域与内存溢出异常:

Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。

1.Java虚拟机运行时的数据区域

(a)程序计数器

它可以看成是线程所执行的字节码的行号指示器,,工作是通过改变计数器来执行下一个需要执行的字节码指令。线程本质上采用分配时间片的方式来进行执行,所以,为了能够让线程切换后恢复到原来的位置,需要为每一个线程独立分配一个计数器,相互独立,独立存储,这类内存区域称为“线程私有”的内存。

(b)Java虚拟机栈

虚拟机栈描述的是java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用到完成的过程,就对应了一个栈帧在虚拟机栈中入栈到出栈的过程。

(c)本地方法栈

本地方法栈与虚拟机栈所发挥的作用是非常相似的,它们之间的区别不过是虚拟机栈是为java方法服务的,而本地方法栈是为虚拟机所使用到的native服务。

(d)Java堆

Java堆是Java虚拟机所管理的内存最大的一块,是被所有线程共享的区域,此内存区域唯一的目的就是存储内存对象的实例,几乎所有的对象实例都存储在这里,所以这里也是垃圾收集器管理的主要区域,对对象实例的回收。

(e)方法区

是各个线程共享的区域,主要存储被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。

2.对象的内存布局

对象头、实例数据和对齐填充

如果使用句柄访问的话,那么Java堆中将会划分出一块内存来作为句柄池,reference中存储的就是对象句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息。

如果使用直接指针访问,那么java堆对象的布局中就必须考虑如何访问数据类型的相关信息,而reference中存储的直接就是对象地址。

《深入理解Java虚拟机》之(一、内存区域)的更多相关文章

  1. 《深入理解 java 虚拟机》学习 -- 内存分配

    <深入理解 java 虚拟机>学习 -- 内存分配 1. Minor GC 和 Full GC 区别 概念: 新生代 GC(Minor GC):指发生在新生代的垃圾收集动作,因为 Java ...

  2. 深入理解Java虚拟机(自动内存管理机制)

    文章首发于公众号:BaronTalk 书籍真的是常读常新,古人说「书读百遍其义自见」还是很有道理的.周志明老师的这本<深入理解 Java 虚拟机>我细读了不下三遍,每一次阅读都有新的收获, ...

  3. 深入理解Java虚拟机之JVM内存布局篇

    内存布局**** ​ JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定高效运行.不同的JVM对于内存的划分方式和管理机制存在部分差异.结合JVM虚拟机规范,一起来 ...

  4. 【深入理解Java虚拟机】自动内存管理机制——内存区域划分

      Java与C++之间有一堵有内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来.C/C++程序员既拥有每一个对象的所有权,同时也担负着每一个对象生 ...

  5. Java虚拟机运行时内存区域简析

    figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-wid ...

  6. 【深入理解Java虚拟机】自动内存管理机制——垃圾回收机制

      Java与C++之间有一堵有内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来.C/C++程序员既拥有每一个对象的所有权,同时也担负着每一个对象生 ...

  7. 深入理解Java虚拟机(一)——JVM内存模型

    文章目录 程序计数器 定义 作用 特点 Java虚拟机栈 定义 特点 本地方法栈 定义 Java堆 定义 特点 方法区 定义 特点 运行常量池 直接内存 总结 Java虚拟机的内存空间分为五个部分: ...

  8. 深入理解JAVA虚拟机原理之内存分配策略(二)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 1.对象优先在Eden分配 大多情况,对象在新生代Eden区分配.当Eden区没 ...

  9. 深入理解java虚拟机(一)虚拟机内存划分

    Java虚拟机在执行Java程序时,会把它管理的内存划分为若干个不同的数据区.这些区域有不同的特性,起不同的作用.它们有各自的创建时间,销毁时间.有的区域随着进程的启动而创建,随着进程结束而销毁,有的 ...

  10. 深入理解java虚拟机---虚拟机工具jconsole(十八)

    Jconsole,Java Monitoring and Management Console. Jconsole是JDK自带的监控工具,在JDK/bin目录下可以找到.它用于连接正在运行的本地或者远 ...

随机推荐

  1. NOIp2012:借教室

    题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然 ...

  2. 洛谷 题解 P1284 【三角形牧场】

    状态: dp[i][j]表示用i和j的木板能否搭成,不用去管第三块,因为知道了两块的长度与周长,那就可以表示出第三块:c-i-j 转移 有点类似于背包 if((j-l[i]>=0&&am ...

  3. HTML 全局属性 = HTML5 中添加的属性。

    属性 描述 accesskey 规定激活元素的快捷键. class 规定元素的一个或多个类名(引用样式表中的类). contenteditable 规定元素内容是否可编辑. contextmenu 规 ...

  4. The Maze II

    There is a ball in a maze with empty spaces and walls. The ball can go through empty spaces by rolli ...

  5. celery异步任务

    1.安装 pip install celery 2.创建celery_tasks文件夹,创建config配置文件和main文件 # 在config.py文件中配置中间人broker地址信息 - red ...

  6. java源码--ArrayList

    1.1.ArrayList概述 1)ArrayList是可以动态增长和缩减的索引序列,它是基于数组实现的List类. 2)该类封装了一个动态再分配的Object[]数组,每一个类对象都有一个capac ...

  7. springCloud-Hystrix熔断器

    熔断器的原理很简单,如同电力过载保护器.它可以实现快速失败,如果它在一段时间内侦测到许多类似的错误,会强迫其以后的多个调用快速失败,不再访问远程服务器,从而防止应用程序不断地尝试执行可能会失败的操作, ...

  8. Idea中maven的设置

    File->setting    输入MAVEN     看到右侧设置情况     Maven home directory 熟路本地moven 仓库目录:D:/springboot/apach ...

  9. 20190728-Python爬取视频&切割视频&视频加水印

    1.视频爬取 1.下载视频的源码如下: import os import requests from bs4 import BeautifulSoup import threading from bj ...

  10. 怎样启动和关闭nginx服务器

    启动: 直接使用命令: nginx nginx 关闭1: 快速停止 nginx -s stop 关闭2: 完整有序停止 nginx -s quit 重启: 如下 nginx -s reload