JVM
文章平均质量分 84
深山里的天空
每次遇到难题,想办法解决后,过一段时间都会忘记,因此不如把学过的记下来,改变从现在开始!
展开
-
JVM之走进Java(一)
1、Java特点 不仅是一门编程语言,还是有一系列计算机软件和规范形成的技术体系;除了是一门结构严谨、面向对象的编程语言之外: (1)、跨平台:一次编写,到处运行,主要是java采用中间体(字节码),而非是依赖平台的机器码,并且是在运行时编译; (2)、相对安全的内存管理和访问机制,避免了绝大多数内存泄漏和指针越界问题; (3)、实现了热点代码检测和运行时编译优化,可以使Java随着运行时...原创 2018-04-09 16:41:03 · 199 阅读 · 0 评论 -
JVM之Java内存模型与线程(十二)
硬件的效率与一致性 在执行并发多任务的时候,由于处理器至少要与内存交互,而他们间速度相差几个数量级,因此计算机增加了一层高速缓存作为缓冲,解决了速度矛盾。但是却对多处理器系统带来一个新的问题:由于每一个处理器都有自己的高速缓存,并且他们共享一块主存。当多个处理器的运算任务都涉及到同一块主内存时,可能导致各自的缓存数据不一致。如果发生这种情况,同步回到主存时,到底以谁的数据为准那?为了解决一致性问...原创 2018-06-17 18:36:19 · 248 阅读 · 0 评论 -
静态代理与动态代理
某个对象提供一个代理,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。 有时候我们需要一些代理类来完成一些操作或访问控制,这个时候就需要产生相应的代理类,而产生代理类大致分为两种: **》静态代理:由程序员编写或工具自动生成代理类源码,编译成...原创 2018-06-01 16:34:53 · 211 阅读 · 0 评论 -
JVM之晚期(运行期)优化(十一)
部分商用虚拟机最初是通过解释器进行解释执行,当虚拟机发现某个方法或某段代码运行比较频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时虚拟就会启用编译器把字节码编译为本地代码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器。...原创 2018-06-13 22:17:43 · 202 阅读 · 0 评论 -
JVM之早期(编译期)优化(十)
      java语言的编译期是一段不确定的过程,因为它可能是指一个前端编译器(sun的javac、eclipse JDT中的ECJ),把.java文件转为..class文件;也可能是指虚拟机的后端运行期编译器(JIT:C1、C2)把字节吗转变为机器码的过程;还有可能指使用静态提前编译器(AOT:GCJ)原创 2018-06-06 17:10:31 · 470 阅读 · 5 评论 -
JVM之虚拟机字节码执行引擎(八)
虚拟机的执行引擎是自己实现的,有自己的指令集和执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。(物理机执行引擎是建立在处理器、硬件、指令集和操作系统层面)。 但在不同的虚拟机实现里,执行引擎在执行java代码的时候,可能会解释执行和编译执行,也可两者兼备,但外观看起来都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。 运行时栈帧结构 &nbs...原创 2018-05-24 22:26:51 · 290 阅读 · 0 评论 -
自定义类加载器
转:https://blog.csdn.net/seu_calvin/article/details/52315125 先介绍自定义类加载器的应用场景: (1)加密:Java代码可以轻易的被反编译,如果你需要把自己的代码进行加密以防止反编译,可以先将编译后的代码用某种加密算法加密,类加密后就不能再用Java的ClassLoader去加载类了,这时就需要自定义ClassLoader在加载类的时候...转载 2018-06-04 22:44:44 · 1295 阅读 · 0 评论 -
JVM之类加载及执行子系统的案例与实战(九)
在Class文件格式与执行引擎这部分中,用户能直接影响的内容并不多。能通过程序进行操作的,主要是字节码生成和类加载器这两部分功能,但仅仅在如何处理这两点上,就已经出现了许多值得欣赏和借鉴的思路,这些思路后来成为了许多常用的功能和程序实现的基础。 关于类加载器和字节码案例: 一、正统的类加载器架构 主流的java Web服务器如tomcat、Jetty、WebLogic、WebSphere等,...原创 2018-06-04 11:31:40 · 436 阅读 · 0 评论 -
JVM之类加载机制(七)
前言:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校检、转换解析和初始化,最终形成可以直接被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。      &a原创 2018-05-20 16:35:23 · 223 阅读 · 0 评论 -
JVM之类文件结构(六)
    各种不同的平台虚拟机与所有平台都统一使用的程序存储格式–字节码是构成平台无关性的基石。  &原创 2018-05-13 10:21:16 · 163 阅读 · 0 评论 -
JVM之垃圾收集器与内存分配策略(三)
对于回收主要思考问题: 那些内存需要回收? 什么时候回收? 如何回收? 来展开 第一个问题:那些内存需要回收? 即在哪些区域回收?在这些区域中那些内存可以回收?(对象是否已死?) 回收区域: 虚拟机栈、本地方法栈、程序计数器这些都属于线程私有区域,随线程而灭,栈中的栈帧在类结构确定下来时就基本已经确定,因此有条不紊的进行出栈和入栈操作,方法结束或线程结束内存就自然回收了。因此关...原创 2018-05-02 22:02:43 · 99 阅读 · 0 评论 -
JVM之Java内存区域与内存溢出异常(二)
对于从事C、C++程序开发的开发人员来说,在内存管理领域,他们拥有每一个对象的“所有权”,又担负着对象整个生命周期的维护责任,即维护对象从创建到结束的内存管理; 而对于Java程序员来说,有虚拟机自动内存管理机制帮助,不需要为每一个new 操作去写delete/free代码(释放内存),不容易出现内存泄漏和内存溢出问题(虚拟...原创 2018-05-02 16:58:19 · 146 阅读 · 0 评论 -
JVM之线程安全与锁优化(十三)
      在软件业发展初期,程序编写都是以算法为核心的,程序员会把数据和过程分别作为独立的部分来考虑,数据代表问题空间中的客体,程序代码则用于处理这些数据,这种思维的方式直接站在计算机的角度去抽象问题和结局问题,称为面向过程的编程思想。 &原创 2018-06-18 23:28:54 · 166 阅读 · 0 评论