一、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中存储的直接就是对象地址。

最新文章

  1. 生成模型(Generative Model)与判别模型(Discriminative Model)
  2. 关于SQL安装问题及安装前的准备
  3. 转 Windows+VS2013爆详细Caffe编译安装教程
  4. 一道数学题 hduacm 5144
  5. jQuery对下拉框Select操作总结
  6. c++各种数据类型表示范围
  7. C# 酒鬼买酒喝,瓶盖和空瓶子可以换新的酒
  8. 高质量程序设计指南C/C++语言——C++/C程序设计入门(3)
  9. Mysql连表查询
  10. [VC++]用CTime类得到当前日期、时间、星期,格式化(详细讲解)
  11. 利用Google浏览器调试js代码
  12. VUE2.0 elemenui-ui 2.0.X 封装 省市区三级
  13. easygui控件介绍
  14. 『最短Hamilton路径 状态压缩DP』
  15. 2016-2017-2 20155312 实验二《Java面向对象程序设计》实验报告
  16. 批处理/命令行合并js,递归合并子目录js文件
  17. RF实现多次失败重跑结果合并的基础方法和优化方法
  18. 20170719xlVBASmartIndent
  19. VS2013 C++ 动态链接库的生成
  20. 160621、Java注解教程及自定义注解

热门文章

  1. Django各个文件中常见的模块导入
  2. POJ 1840:Eqs
  3. layer简单使用
  4. POJ3311 Hie with the Pie 【状压dp/TSP问题】
  5. Python 解leetcode:48. Rotate Image
  6. tomcat单机多应用部署配合Nginx负载均衡
  7. codeforces 1249C1 + 1249C2 (贪心)
  8. Python基础 第三章 使用字符串(3)字符串方法&本章小结
  9. spark调优篇-Spark ON Yarn 内存管理(汇总)
  10. WPF入门(3)——命令