摘要: 1、运行时数据区域 ① 程序计数器(Program Counter Register) 是一块较小的内存区域,可以看作是当前线程所执行的字节码的行号指示器 如果线程正在执行一个java方法,那么这个计数器记录的是正在执行的虚拟机字节码的指令地址 如果正在执行的是Native方法,则这个计数器的值为空 阅读全文
posted @ 2016-07-25 15:30 峰扬迪 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 一、 java优点 摆脱了硬件平台的束缚,实现了“一次编写,到处运行”的理想; 提供了一个相对安全的内存管理和访问机制,避免了绝大部分的内存泄露和指针越界问题; 实现了热点代码检测和运行时编译及优化,这使得Java应用能随着运行时间的增加而获得更高的性能; 有一套完善的应用程序接口,还有无数来自商业 阅读全文
posted @ 2016-07-25 15:30 峰扬迪 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 1.概述 程序计数器、虚拟机栈、本地方法栈是线程私有的,内存分配和回收都具有确定性,不需要考虑垃圾回收的问题,方法结束或者线程结束,内存就自然回收了 java堆和方法区的内存的分配和回收都是动态的,垃圾收集器所关注的是这部分的内存 2.垃圾收集器处理的对象 垃圾收集器需要确定哪些对象还“存活”着,哪 阅读全文
posted @ 2016-07-25 15:29 峰扬迪 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 工具位于 JDK下bin中 1.JDK的命令行工具 监控和故障处理工具 ① jps:虚拟机进程状况工具 jsp命令格式: jps[options][hostid] jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名。jps的其他常用选项见下表。 阅读全文
posted @ 2016-07-25 15:28 峰扬迪 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 1 案例分析 ① 高性能硬件上的程序部署策略 在高性能硬件上部署程序,目前主要有两种方式: 通过64位JDK来使用大内存。 使用若干个32位虚拟机建立逻辑集群来利用硬件资源。 在高性能硬件上部署程序,目前主要有两种方式: 通过64位JDK来使用大内存。 使用若干个32位虚拟机建立逻辑集群来利用硬件资 阅读全文
posted @ 2016-07-25 15:27 峰扬迪 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 执行引擎是Java虚拟机最核心的组成部分之一。 物理机的执行引擎建立在处理器、硬件、指令集和操作系统之上的,虚拟机的执行引擎需要自己实现,因此可以自己制定指令集与执行引擎的结构体系,并且支持那些不被硬件直接支持的指令集格式。 1、运行时栈帧结构 栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构, 阅读全文
posted @ 2016-07-25 15:26 峰扬迪 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性,Java里天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。 1. 类加载的时机 类从被加载到虚拟机内存中开始,到 阅读全文
posted @ 2016-07-25 15:26 峰扬迪 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 1. Class类文件的结构 任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,类或接口并不一定都得定义在文件里(譬如类或接口也可以通过类加载器直接生成)。”Class“文件不一定是磁盘上存在的 Class文件是一组以8位字节为基础单位的二进制流,只有两种数据类型:无符号数和表 阅读全文
posted @ 2016-07-25 15:26 峰扬迪 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 1、解释器与编译器 整个虚拟机执行架构中,解释器与编译器经常配合工作,如图 分层编译根据编译器编译、优化的规模与耗时,划分出不同的编译层次,其中包括: 第0层,程序解释执行,解释器不开启性能监控功能(Profiling),可触发第1层编译。 第1层,也称为C1编译,将字节码编译为本地代码,进行简单、 阅读全文
posted @ 2016-07-25 15:25 峰扬迪 阅读(425) 评论(0) 推荐(0) 编辑
摘要: javac 编译的过程大致可以分为3个过程,分别是: 解析与填充符号表过程。 插入式注解处理器的注解处理过程。 分析与字节码生成过程。 解析与填充符号表过程。 插入式注解处理器的注解处理过程。 分析与字节码生成过程。 这3个步骤之间的关系与交互顺序如图 1、解析与填充符号表 ①词法、语法分析 词法分 阅读全文
posted @ 2016-07-25 15:25 峰扬迪 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 1、Java内存模型 Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储 阅读全文
posted @ 2016-07-25 15:24 峰扬迪 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 1、Java语言中的线程安全 按照线程安全的“安全程度”由强至弱来排序,可以将Java语言中各种操作共享的数据分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。 2、线程安全的实现方法 ①互斥同步 互斥同步(Mutual Exclusion&Synchronization)是常见 阅读全文
posted @ 2016-07-25 15:23 峰扬迪 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 时间复杂度:最好O(n),平均和最坏情况O(n2) 空间复杂度:O(1) 稳定排序 原理:从第一个元素开始,依次比较相邻两个元素,如果前者比后者大,那么就交换者两个元素,然后处理下一组,依次类推,直到排序完成。 实现: 时间复杂度:最好、平均和最坏情况O(n2) 空间复杂度:O(1) 不是稳定排序 阅读全文
posted @ 2016-07-25 14:03 峰扬迪 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 回文字符串问题 一、动态规划法 定义boolean型的 p[i][j],为 Si 到 Sj 是否为回文,true 说明 Si 到 Sj 是回文字符串 则有,P[i,j] = (P[i + 1, j - 1] && Si ==Sj) 初始条件p[i, i] = true, p[i,i+1] = Si= 阅读全文
posted @ 2016-07-25 13:59 峰扬迪 阅读(2153) 评论(0) 推荐(0) 编辑
摘要: 题目描述 给定一个未排序的整数数组,找出最长递增子序列。 例如给定数组[10, 9, 2, 5, 3, 7, 101, 18],最长递增子序列就是[2, 3, 7, 101],长度就是4,最长递增子序列不一定只有一个,只要求出最长的长度。 解法一 动态规划法,定义一个数组dp,dp[i]代表了第i个 阅读全文
posted @ 2016-07-25 13:51 峰扬迪 阅读(371) 评论(0) 推荐(0) 编辑