《深入理解java虚拟机》一些笔记
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《深入理解java虚拟机》一些笔记相关的知识,希望对你有一定的参考价值。
大三下学期刚考完,把一个商城项目匆匆做完了,开始捧起这本书,但是感觉内容繁多,为了便于以后复习,这里总结一些笔记,大部分都是直接copy书上的,这本书还没看完也不知道自己能看到哪里,慢慢看吧
第一章 走进java
1.java优点:1)它摆脱了硬件平台的束缚,实现了“一次编写,到处运行”的理想 。 2)提供了一个相对安全的内存管理和访问机制,避免了绝大部分的内存泄露和指针越界问题。3)实现了热点代码和运行时的编译和优化 4)有一套完整的应用程序接口,还有无数来自商业机构和开源社区的第三方类库来帮助它实现各种各样的功能。。。
2.我们可以吧Java程序设计语言、java虚拟机、JavaAPI类库这三部分统称为JDK(java development kit) ,JDK是用于支持java程序开发的最小环境,另外把javaAPI类库中的 javase API子集和java虚拟机这两部分统称为jre(java runtime environment)jre是支持java程序运行的标准环境
3.java技术分为四个平台分别为:1) javaCard 支持一些java小程序在小设备上运行的平台。2) java ME(Micro Edition)支持java运行在移动终端平台 3)javaSE (standard Edition) 支持面向桌面的应用,提供了java核心API,这个版本以前成为J2SE 4)javaEE(Enterprise Edition)支持使用多层架构的企业应用(如ERP(企业资源计划)、CRM(客户关系管理))的java平台,除了提供Java SE API以外,还对其做了大量的扩充并提供了部署支持
4.java发展史:
JDK1.1 技术代表:JAR文件格式、JDBC、JavaBeans 、RMI ,java语法得到了发展如内部类和反射
JDK1.2 技术代表:EJB、Java Plug-in、Java IDL、Swing ,在语言API上java添加了strictfp关键字和Collections集合类
JDK1.3 改进主要体现在一些类库上(如数学运算和新的Timer API) JNDI服务从1.3开始被作为一项平台及服务提供(原来仅仅是一个扩展)
JDK1.4 这是java真正走向成熟的一个版本 技术代表:正则表达式、异常链、NIO、日志类、XML解析和XSLT转换器
JDK1.5 语法易用性进行了改进:自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环*(foreach),改进了java内存模型(JMM)提供了java.util.concurrent并发包,并且这是官方声明可以支持WINDOWS9x平台最后一个版本
JDK1.6 提供动态语言支持、提供编译API和微型HTTP服务API,同时这个版本对java虚拟机内部做了很大改进,包括锁与同步、垃圾收集、类加载方便的算法都有改动
JDK1.7 Lambda表达式 Jigsaw项目、动态语言支持、GarbageFirst收集器和Coin项目
JDK1.8 书上是在1.8以前出版的,详细看http://blog.csdn.net/laliocat/article/details/50866609
5.Java技术的未来1)模块化 2)混合语言 3)多核并行 4)进一步丰富语法 5)64位虚拟机
第二章 Java内存区域与内存溢出异常
1. 程序计数器是一块较小的内存空间,在虚拟机概念模型里,字节码解释器工作就是通过改变这个计数器来取得需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等
2.java虚拟机栈 线程私有 描述的是java方法执行的内存模型,每个方法在执行会创建一个栈帧 用于存储局部变量表、操作数栈、动态链接、方法出口等信息 ,局部变量表存放各种基本数据类型、对象引用
3. StackOverFlowError:线程请求的栈深度大于虚拟机所允许的深度 OutOfMemoryError 如果虚拟机栈动态扩展是无法申请足够的内存
4.本地方法栈为虚拟机使用的Native方法服务
5.Java堆 线程共享 GC管理主要区域 主要存放对象实例 。java堆可以处于物理不连续的,但是要逻辑连续
6.方法区: 线程共享 存储被虚拟机加载的类信息、常量、静态变量、即时编译后的代码
7.运行常量池:用于存放编译期间生成的各种字面量符号的引用
8.直接内存:并不是虚拟机运行是数据区的部分,也不是java虚拟机规范定义的内存区域。
9.对象的创建:new 关键字——检查指令参数能否在常量池定位到一个符号类——执行相应的类加载过程——虚拟机为新生对象分配内(两种方法:指针碰撞和空闲列表)——虚拟机对对象进行必要的设置——产生新对象
10.对象访问方式主要有句柄(refernce中储存稳定地址)和直接指针(访问速度快 )
以上是关于《深入理解java虚拟机》一些笔记的主要内容,如果未能解决你的问题,请参考以下文章