
JVM
azhegps
技术源于不断滴追求!
展开
-
【参考】JVM基于栈的解释器执行过程
本文根据《深入理解java虚拟机》第8章部分内容整理 根据一个代码实例来介绍虚拟机中解释器的执行过程,代码如下所示: Java代码 publicintcalculate(){ inta=100; intb=200; intc=300; return(a+b)*c; } 由上面的代...转载 2017-01-05 13:59:44 · 2030 阅读 · 0 评论 -
JVM堆溢出处理
在Java程序的运行过程中,如果堆空间不足,则有可能抛出内存溢出错误(Out Of Memory),简称为OOM。如下文字显示了典型的堆内存溢出: Exceptioninthread“main”java.lang.OutOfMemoryError:Javaheapspace atgeym.zbase.ch3.heap.DumpOOM.main(DumpOOM.java:20...转载 2017-01-18 19:42:39 · 289 阅读 · 0 评论 -
【参考】JVM的工作模式
目前的Java虚拟机支持Client和Server两种运行模式。使用参数-client可以指定使用Client模式,使用参数-server可以指定使用Server模式。默认情况下,虚拟机会根据当前计算机系统环境自动选择运行模式。使用-version参数可以查看当前的模式,如下所示: ./java-version javaversion"1.7.0_40" Jav...转载 2017-01-18 19:43:12 · 274 阅读 · 0 评论 -
【参考】Java中finalize()用法
Java中finalize() Java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize()。 (1).对象不一定会被回收。 (2).垃圾回收不是析构函数。 (3).垃圾回收只与内存有关。 (4).垃圾回收和final...转载 2017-05-05 14:02:23 · 476 阅读 · 0 评论 -
了解CMS(Concurrent Mark-Sweep)垃圾回收器
1.总体介绍: CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动JVM参数加上-XX:+UseConcMarkSweepGC ,这个参数表示对于老年代的回收采用CMS。CMS采用的基础算法是:标记—清除。 2.CMS过程: 初始标记(STW initial m转载 2017-05-08 17:41:10 · 277 阅读 · 0 评论 -
并发和并行的区别
所有的并发处理都有排队等候,唤醒,执行至少三个这样的步骤.所以并发肯定是宏观概念,在微观上他们都是序列被处理的,只不过资源不会在某一个上被阻塞(一般是通过时间片轮转),所以在宏观上看多个几乎同时到达的请求同时在被处理。如果是同一时刻到达的请求也会根据优先级的不同,而先后进入队列排队等候执行。 并发与并行是两个既相似而又不相同的概念:并发性,又称共行性,是指能处理多转载 2017-05-08 17:46:15 · 312 阅读 · 0 评论 -
Java内存管理:深入Java内存区域
Java内存管理:深入Java内存区域 本文引用自:深入理解Java虚拟机的第2章内容 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。 概述: 对于从事C和C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的皇帝,又是从事最基础工作的劳动人民—既拥有每 一个对象的“所有权”,又担负着每一个对象生命...转载 2019-08-09 13:28:30 · 107 阅读 · 0 评论 -
JVM类加载器以及双亲委派模型介绍
从虚拟机的角度来说,只存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),该类加载器使用C++语言实现,属于虚拟机自身的一部分。另外一种就是所有其它的类加载器,这些类加载器是由Java语言实现,独立于JVM外部,并且全部继承自抽象类java.lang.ClassLoader。 从Java开发人员的角度来看,大部分Java程序一...转载 2017-01-05 13:58:41 · 335 阅读 · 0 评论 -
【参考】JVM类加载的过程
本文根据《深入理解java虚拟机》第7章部分内容整理 在我的上一篇文章《JVM学习笔记(六):类加载的时机》中提到了java类从加载到卸载过程包括了加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(using)、和卸载(Unloading)七个阶段。下面我们来详...转载 2017-01-05 13:58:19 · 396 阅读 · 0 评论 -
Java设计优化思路
设计优化手段: 设计模式:使用常用设计模式改善代码,优化运行时产生的对象、对象生命周期等。 Value-Object:合并网络请求,减少网络请求。 业务代理:对业务模块封装代理层,代理层缓存远程调用的请求数据。 缓存和缓冲区:缓存热区数据,对延时比较大的功能使用缓冲技术。 池技术:使用线程池、连接池、对象池等技术减少对象、连接的重新创建。 并行化:充分利用cpu资源,采用多进程、多线程...转载 2016-09-18 17:25:19 · 304 阅读 · 0 评论 -
Java程序优化思路
程序代码优化要点: 字符串优化:分析String源码,了解String常用方法,使用StringBuffer、StringBuilder。 List、Map、Set优化:分析常用ArrayList、LinkedList、HashMap、TreeMap、LinkedHashMap、Set接口、集合常用方法优化。 使用NIO:Buffered、Channel操作和原理,使用零拷贝。 引用优化:...转载 2016-09-18 17:27:32 · 464 阅读 · 0 评论 -
Java Thread Dump 日志分析
jstack Dump 日志文件中的线程状态 dump 文件里,值得关注的线程状态有: 死锁,Deadlock(重点关注) 执行中,Runnable 等待资源,Waiting on condition(重点关注) 等待获取监视器,Waiting on monitor entry(重点关注)暂停,Suspended对象等待中,Object.wait() 或 TIMED转载 2016-12-06 14:13:24 · 596 阅读 · 0 评论 -
JVM运行时数据区
运行时数据区 PC寄存器 也叫程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器。 1、每一条JVM线程都有自己的PC寄存器。 2、在任意时刻,一条JVM线程只会执行一个方法的代码。该方法称为该线程的当前方法(Current Method)。 3、如果该方法是java方法,那PC寄存器保存JVM正在执行...转载 2017-01-05 13:50:56 · 257 阅读 · 0 评论 -
JVM的垃圾回收
一.如何判断对象是否需要回收? 堆中几乎放着Java世界中的所有的对象实例,垃圾收集器在对堆进行回收前,第一件事就是要确定这些对象哪些还“存活”着,哪些已经“死去”(即不可能再被任何途径使用的对象)。而如何判断对象是否应该回收,存在两个算法:引用计数算法(Reference Counting)和根搜索算法(GC Roots Tracing)。但是Java语言中没有选用引用计数算...转载 2017-01-05 13:52:11 · 261 阅读 · 0 评论 -
【参考】JVM中Class文件结构
一、Java的语言无关性 实现语言无关性的基础仍然是虚拟机和字节码存储格式,使用Java编译器可以把Java代码编译为存储字节码的Class文件,使用JRuby等其它语言的编译器一样可以把程序编译成Class文件,虚拟机不需要关心Class来源于什么语言,只要它符合Class文件应用的结构就可以在Java虚拟机中运行。【Java虚拟机提供的语言无关性】如下图所示: 二、Cl...转载 2017-01-05 13:53:04 · 306 阅读 · 0 评论 -
【参考】JVM根据字节码指令介绍方法执行流程
在上一篇博客中介绍了《Class文件结构》,其中就提到了一个例子,下面我们依然根据该例子的字节码来对方法的执行流程进行讲解。 publicclassTestClass{ privateintnum; publicintinc(){ for(inti=0;i<10;i++){ ...转载 2017-01-05 13:57:07 · 393 阅读 · 0 评论 -
【参考】JVM类加载的时机
Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的加载机制。 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initial...转载 2017-01-05 13:57:55 · 312 阅读 · 0 评论 -
Java自定义类加载器与双亲委派模型
其实,双亲委派模型并不复杂。自定义类加载器也不难!随便从网上搜一下就能搜出一大把结果,然后copy一下就能用。但是,如果每次想自定义类加载器就必须搜一遍别人的文章,然后复制,这样显然不行。可是自定义类加载器又不经常用,时间久了容易忘记。相信你经常会记不太清loadClass、findClass、defineClass这些函数我到底应该重写哪一个?它们主要是做什么的?本文大致分析了各个函数的流程,目...转载 2019-08-10 19:30:50 · 98 阅读 · 0 评论