java虚拟机之路
文章平均质量分 68
li563868273
个人主页:lizhao.pw
展开
-
java内存区域
Java内存区域 我写这个文章只是对学习的一些记录加上自己的理解,所以很简陋,详细可参考周志明的《深入理解Java虚拟机》或者《Java虚拟机规范(Java SE 7版)》的中译本。运行时的数据区域深入理解Java虚拟机中的图画得不是特别详细,所以我在网上找了稍微详细一点的!针对这个图我会详细说明程序技术器,Java虚拟机栈,本地方法栈,Java堆,方法区,运行时常量池,还有一个直接内存(图上没有原创 2015-11-22 17:48:23 · 531 阅读 · 0 评论 -
虚拟机性能监控与故障处理
命令工具java开发人员肯定都知道JDK的bin目录中有”java.exe”,”javac.exe”这两个命令行工具,但并非所有程序员都了解过jdk的bin目录之中其他命令行程序的作用。 下面先概括介绍下作用: jps:显示指定系统内所有的HotSpot虚拟机进程。 jstat:用于收集HotSpot虚拟机各方面的运行数据。 jinfo:显示虚拟机配置信息。 jmap:生成虚拟机的内存转储原创 2016-04-17 10:20:59 · 566 阅读 · 0 评论 -
JAVA中Comparable和Comparator的区别
Comparable & Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。Comparator位于包Java.util下,而Comparable位于包 ja转载 2016-04-29 16:53:04 · 285 阅读 · 0 评论 -
深入理解Javac编译器
深入理解Javac编译器介绍 简单的介绍什么是Javac编译器: javac 是javac语言编程编译器。javac工具读由java语言编写的类和接口的定义,并将它们编译成字节代码的class文件。javac 可以隐式编译一些没有在命令行中提及的源文件。javac编译过程 1.解析与填充符号表过程 2.插入式注解处理器的注解处理过程(回环过程)。 3.分析与字节码生成过程原创 2015-12-03 20:22:01 · 1899 阅读 · 0 评论 -
What is java语法糖
What is java语法糖 语法糖可以看做是编译器实现的一些小把戏,这些小把戏可能会使得效率“大提升”。、泛型和类型擦除 Java的泛型是JDK1.5版本之后才有的特性,在没泛型特性之前,只能通过Object是所有类的父类和类型强制转换来实现类型泛化。对于这种依靠Object很容易在强制转换时发生ClassCastException。 java的泛型和c++,c#的泛型不一样,他们的泛型在原创 2015-12-03 20:21:17 · 433 阅读 · 0 评论 -
HotSpot虚拟机即时编译器4大问题解决-即时编译器的学习
HotSpot虚拟机即时编译器4大问题解决-即时编译器的学习 1.为何HotSpot虚拟机要使用解释器与编译器并存的架构? 2.为何HotSpot虚拟机要实现两个不同的编译器? 3.程序何时使用解释器执行?何时使用编译器执行? 4.哪些程序代码会被编译成本地代码?如何编译为本地代码?1.为何HotSpot虚拟机要使用解释器与编译器并存的架构? 尽管不是所有的ja原创 2015-12-03 21:14:50 · 1306 阅读 · 0 评论 -
Servlet的单例实现多线程
Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在一个Servlet实例); 2.容器初始化化Servlet主要就是读取配置文件(例如tomcat,可以通过servlet.xml的设置线程池中线程数目,初始化线程池通过web.xml,初始化每个参转载 2015-12-03 17:37:06 · 402 阅读 · 0 评论 -
方法区
方法调用 方法调用不等于方法执行,其唯一的任务就是确定调用哪一个具体方法,暂时还不涉及方法内部的具体运行过程。在程序运行时,进行方法调用时最普遍,最频繁的操作。解析所有方法调用中的目标方法在Class文件里面都是一个常量池中的符号引用。在类加载的解析阶段,一部分符号引用会被转化为直接引用,这种解析成立的前提是:方法在程序真正运行之前就有一个可确定的调用版本,且这个方法的调用版本在运行时是不可改原创 2015-11-30 13:39:57 · 618 阅读 · 0 评论 -
虚拟机字节码执行引擎
虚拟机字节码执行引擎 执行引擎是Java虚拟机最核心的组成部分之一。在不同的虚拟机中看,执行引擎在执行JAVA代码的时候可以选择解释执行(通过解释器执行)和编译执行(通过即使编译器产生本地代码执行)两种选择。但是从外观上,所有java虚拟机执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。运行时栈帧结构 用于支持虚拟机进行方法调用和方法执行的数据结原创 2015-11-30 12:58:49 · 318 阅读 · 0 评论 -
虚拟机类加载机制
虚拟机类加载机制类的生命周期 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了:加(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(using)、和卸载(Unloading)七个阶段。其中验证、准备和解析三个部分统称为连接(Linking),这七个阶段的发生顺序如下原创 2015-11-27 17:51:24 · 516 阅读 · 0 评论 -
类加载器和双亲委派机制
预定义类加载器和双亲委派机制JVM预定义的三种类型类加载器: 启动(Bootstrap)类加载器:是用本地代码实现的类装入器,它负责将 <Java_Runtime_Home>/lib下面的类库加载到内存中(比如rt.jar)。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。 标准扩展(Extension)类加载器:是由转载 2015-11-27 17:58:55 · 633 阅读 · 0 评论 -
类文件结构
首先要提到平台无关性和语言无关性,平台无关性,这里大家也都知道了。对于语言无关性这里要简单的提一下,很多人认为java虚拟机只能运行Java的代码其实是不正确的,虚拟机并不会关心Class的来源是什么语言,只要符合Class文件应有的结构就可以在java虚拟机中运行。比如Clojure,Groovy,JRuby,Jython,Scala等。在以后很有可能语言无关性会超过平台无关性。Class类文件结原创 2015-11-26 12:59:26 · 379 阅读 · 0 评论 -
rest推送实现--jesey SSE
rest推送实现–jesey SSE 服务器推送技术,是一种当服务器端的业务数据,资源状态发生改变的时候,服务器可以主动将这个信息通知给浏览器的通信技术。这里我们不讨论TCP/IP协议建立的连接,基于这种的Socket,一但连接建立,在这样的双向通信链路中随时都可以发送通知。如果我们自己在项目中实现一般还是使用第三方的,比如极光推送这个也是采用建立TCP长连接实现的。我们这里就主要介绍HTT原创 2015-12-11 14:16:45 · 4919 阅读 · 2 评论 -
垃圾回收算法之路
垃圾收集算法 在上一节我说了我们应该回收哪些内存,什么时候回收,接下来我会谈怎样回收? 对于这样回收在think in java中也有相同的介绍,但是非常的少,译者也翻译得不太详细,之前读了think in java再看一遍 深入理解java虚拟机,加深了很多理解。标记清除算法 标记-清除算法是最基础的算法,和他名字一样分为两个部分,“标记”和“清除”:首先标记所有需要回收的对象,在标记完成后原创 2015-11-23 17:19:16 · 446 阅读 · 0 评论 -
垃圾收集器之路
垃圾收集器Serial收集器 对于图上可以看见Serial收集器是新生代的收集器,他也是单线程收集器,收集时会暂停所有工作线程(我们将这件事情称之为Stop The World,下称STW),使用复制收集算法,虚拟机运行在Client模式时的默认新生代收集器。ParNew收集器 ParNew 收集器就是Serial的多线程版本,除了使用多条收集线程外,其余行为包括算法、STW、对象分配规则、回收原创 2015-11-23 17:21:01 · 417 阅读 · 0 评论 -
GC之路
本文一样是参考周志明的《深入理解java虚拟机》和java虚拟机规范,加上一些自己的意见,希望大家批评指正。面对GC(Garbage Collection)的三个问题 1.哪些内存需要回收? 2.什么时候回收? 3.如何回收? 了解这三个问题,可以当我们需要排查各种内存溢出,内存泄露问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们可以自己针对其调控。哪些内存需要回收 首先我们根据内存原创 2015-11-23 17:18:14 · 465 阅读 · 0 评论 -
新生代和老年代的区别
新生代和老年代的区分**所谓的新生代和老年代是针对于分代收集算法来定义的,新生代又分为Eden和Survivor两个区。加上老年代就这三个区。数据会首先分配到Eden区 当中(当然也有特殊情况,如果是大对象那么会直接放入到老年代(大对象是指需要大量连续内存空间的java对象)。),当Eden没有足够空间的时候就会 触发jvm发起一次Minor GC。如果对象经过一次Minor GC还存活,并且又能被原创 2015-11-23 17:19:47 · 5941 阅读 · 0 评论 -
Jackson和FastJson性能谁更快
前言jackson和fastjson大概是我们使用得最多的两个json序列化包和反序列化包。网上的性能对比很多,大多数的结果对fastjson都不利,甚至有的结论是比Gson还要慢,但是我觉得fastjson是阿里系的,应该性能不会差,于是作了一系列对比。我们这里使用的是最新的两个包jackjson为2.8版本,而fastjson为1.2.14版本对比使用对象在对比中使用的对象基本包含了所有的数据类原创 2016-07-24 01:09:47 · 10974 阅读 · 3 评论