E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
Jvm学习
深入
JVM学习
笔记 Java技术体系结构
1、不同Java虚拟机执行引擎的实现不同,大体可分为三种 第一种最简单,就是直接一次性解释字节码。 第二种更快,但更消耗内存,叫即时编译器(JIT)。在这种情况下,第一次执行的字节码会被编译成本地机器代码,并缓存起来,当方法以后被调用的时候重用。 第三种是自适应优化器,在这种方法里虚拟机刚开始解释字节码,但会监视运行中程序的活动,记录下使用最频繁的代
matchless1688
·
2011-11-01 14:00
虚拟机
JVM学习
笔记-帧数据区(Frame Data)
Inadditiontothelocalvariablesandoperandstack,theJavastackframeincludesdatatosupportconstantpoolresolution,normalmethodreturn,andexceptiondispatch.ThisdataisstoredintheframedataportionoftheJavastackfra
denverj
·
2011-10-28 09:39
java
jvm
栈
JVM学习
笔记-帧数据区(Frame Data)
阅读更多Inadditiontothelocalvariablesandoperandstack,theJavastackframeincludesdatatosupportconstantpoolresolution,normalmethodreturn,andexceptiondispatch.ThisdataisstoredintheframedataportionoftheJavastac
denverj
·
2011-10-28 09:00
JVM学习
笔记-帧数据区(Frame Data)
In addition to the local variables and operand stack, the Java stack frame includes data to support constant pool resolution, normal method return, and exception dispatch. This data is stored
denverj
·
2011-10-28 09:00
frame
JVM学习
笔记-操作数栈(Operand Stack)
Likethelocalvariables,theoperandstackisorganizedasanarrayofwords.Butunlikethelocalvariables,whichareaccessedviaarrayindices,theoperandstackisaccessedbypushingandpoppingvalues.Ifaninstructionpushesava
denverj
·
2011-10-27 11:00
Opera
JVM学习
笔记-局部变量区(Local Variables)
ThelocalvariablessectionoftheJavastackframeisorganizedasazero-basedarrayofwords.Instructionsthatuseavaluefromthelocalvariablessectionprovideanindexintothezero-basedarray.Valuesoftypeint,float,refere
denverj
·
2011-10-27 10:00
variable
JVM学习
笔记-栈帧(The Stack Frame)
The stack frame has three parts: local variables, operand stack, and frame data. The sizes of the local variables and operand stack, which are measured in words, depend upon the needs of each indiv
denverj
·
2011-10-27 10:00
stack
JVM学习
笔记-栈(Stack)
与程序计数器一样,Java虚拟机栈(JavaVirtualMachineStacks)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(StackFrame①)用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。经常有人把Java内存区分
denverj
·
2011-10-27 10:08
java
jvm
栈
JVM学习
笔记-栈(Stack)
与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame①)用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着
denverj
·
2011-10-27 10:00
stack
JVM学习
笔记-程序计数器(The Program Counter)
程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功
denverj
·
2011-10-27 10:00
count
JVM学习
笔记十一 之 编译期优化和运行期优化
一、概述语言要在虚拟机上执行,必须先翻译成机器代码,翻译的方式有两种,一种是编译期静态翻译为机器码,一种是编译器翻译为某种表示,运行期在翻译成机器码来执行。编译器可分为多种类型,1、编译器把java源文件编译成class文件的前端编译器,如javac和eclipse的jdt增量编译器;2、运行期把.class文件翻译成本地机器代码的JIT编译器,如HotSpotVM的C1、C2编译器;3、直接把j
yueyemaitian
·
2011-10-27 01:00
JVM学习
笔记-堆(Heap)
对于大多数应用来说,Java堆(JavaHeap)是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配①,但是随着JIT编译器的发展与逃逸分析技术的逐渐成熟,栈上分配、标量替换②优化技术将会导致一些微
denverj
·
2011-10-26 16:06
java
jvm
堆
JVM学习
笔记-堆(Heap)
对于大多数应用来说,Java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配①,但是随着JIT编译器的发展与逃逸分析
denverj
·
2011-10-26 16:00
学习笔记
JVM学习
笔记-指向Class类的引用(A Reference to Class Class)
Aninstanceofclassjava.lang.ClassiscreatedbytheJavaVirtualMachineforeverytypeitloads.ThevirtualmachinemustinsomewayassociateareferencetotheClassinstanceforatypewiththetypeísdatainthemethodarea.对于每一个被装载
denverj
·
2011-10-26 16:21
java
方法区
jvm
JVM学习
笔记-指向ClassLoader类的引用(A Reference to Class ClassLoader)
Foreachtypeitloads,aJavaVirtualMachinemustkeeptrackofwhetherornotthetypewasloadedviatheprimordialclassloaderoraclassloaderobject.Forthosetypesloadedviaaclassloaderobject,thevirtualmachinemuststorearef
denverj
·
2011-10-26 16:05
java
方法区
jvm
JVM学习
笔记-指向ClassLoader类的引用(A Reference to Class ClassLoader)
For each type it loads, a Java Virtual Machine must keep track of whether or not the type was loaded via the primordial class loader or a class loader object. For those types loaded via a clas
denverj
·
2011-10-26 16:00
ClassLoader
JVM学习
笔记-指向Class类的引用(A Reference to Class Class)
An instance of class java.lang.Class is created by the Java Virtual Machine for every type it loads. The virtual machine must in some way associate a reference to the Class instance for a type
denverj
·
2011-10-26 16:00
reference
JVM学习
笔记-方法区示例与常量池解析(Method Area Use And Constant Pool Resolution)
As an example of how the Java Virtual Machine uses the information it stores in the method area, consider these classes: 为了展示虚拟机如何使用方法区中的信息,我们举个例子,看下面这个类: begin // On CD-ROM in file jvm/ex2
denverj
·
2011-10-26 16:00
method
JVM学习
笔记-类(静态)变量(Class Variables)
Classvariablesaresharedamongallinstancesofaclassandcanbeaccessedevenintheabsenceofanyinstance.Thesevariablesareassociatedwiththeclass--notwithinstancesoftheclass--sotheyarelogicallypartoftheclassdatai
denverj
·
2011-10-26 16:53
java
方法区
jvm
JVM学习
笔记-类(静态)变量(Class Variables)
Class variables are shared among all instances of a class and can be accessed even in the absence of any instance. These variables are associated with the class--not with instances of the clas
denverj
·
2011-10-26 16:00
variable
JVM学习
笔记十 之 字节码执行引擎
阅读更多一、概述jvmspec只给出了执行引擎的概念模型,并没有规定具体实现细节。执行引擎在执行时候可以解释执行、编译执行或直接由嵌入芯片的指令执行。引擎的行为使用指令集来定义。java的目标是一次编写到处运行,为了达到这个目标,jvm指令集就不能依赖于任何硬件平台的指令,jvm指令集中就只有对栈的操作,没有对特定于硬件平台的寄存器的操作。当然jvm运行期优化的时候,可以针对不同的硬件平台提供不同
yueyemaitian
·
2011-10-26 00:00
动态分派
静态分派
单分派
多分派
栈帧
JVM学习
笔记十 之 字节码执行引擎
一、概述jvmspec只给出了执行引擎的概念模型,并没有规定具体实现细节。执行引擎在执行时候可以解释执行、编译执行或直接由嵌入芯片的指令执行。引擎的行为使用指令集来定义。java的目标是一次编写到处运行,为了达到这个目标,jvm指令集就不能依赖于任何硬件平台的指令,jvm指令集中就只有对栈的操作,没有对特定于硬件平台的寄存器的操作。当然jvm运行期优化的时候,可以针对不同的硬件平台提供不同的优化实
yueyemaitian
·
2011-10-26 00:00
单分派
栈帧
静态分派
动态分派
多分派
JVM学习
笔记十 之 字节码执行引擎
阅读更多一、概述jvmspec只给出了执行引擎的概念模型,并没有规定具体实现细节。执行引擎在执行时候可以解释执行、编译执行或直接由嵌入芯片的指令执行。引擎的行为使用指令集来定义。java的目标是一次编写到处运行,为了达到这个目标,jvm指令集就不能依赖于任何硬件平台的指令,jvm指令集中就只有对栈的操作,没有对特定于硬件平台的寄存器的操作。当然jvm运行期优化的时候,可以针对不同的硬件平台提供不同
yueyemaitian
·
2011-10-26 00:00
动态分派
静态分派
单分派
多分派
栈帧
JVM学习
笔记-方法信息(Method Information)
For each method declared in the type, the following information must be stored in the method area. As with fields, the order in which the methods are declared by the class or interface must be
denverj
·
2011-10-25 09:00
method
JVM学习
笔记-字段信息(Field Information)
For each field declared in the type, the following information must be stored in the method area. In addition to the information for each field, the order in which the fields are declared by t
denverj
·
2011-10-25 09:00
format
JVM学习
笔记-常量池(Constant Pool)
Foreachtypeitloads,aJavaVirtualMachinemuststoreaconstantpool.Aconstantpoolisanorderedsetofconstantsusedbythetype,includingliterals(string,integer,andfloatingpointconstants)andsymbolicreferencestotypes
denverj
·
2011-10-25 09:54
java
方法区
jvm
常量池
JVM学习
笔记-类型信息(Type Information)
For each type it loads, a Java Virtual Machine must store the following kinds of information in the method area: 对每个装载的类型,虚拟机都会在方法区中存储以下类型信息: The fully qualified name of the type
denverj
·
2011-10-25 09:00
format
JVM学习
笔记-常量池(Constant Pool)
For each type it loads, a Java Virtual Machine must store a constant pool. A constant pool is an ordered set of constants used by the type, including literals (string, integer, a
denverj
·
2011-10-25 09:00
Const
JVM学习
笔记-方法区(Method Area)
方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是与Java堆区分开来。 对于习惯在HotSpot虚拟机
denverj
·
2011-10-25 09:00
method
JVM学习
笔记九 之 GC(对象的生命周期系列)
一、概述Java最大的一个特点就是不用开发人员手动释放对象的内存,这些任务就交给了jvm来做。垃圾收集器有很多分类,如按照并行(ParNew、ParallelScavenage、ParallelOld、CMS并发标记阶段、g1)、并发(cms并发标记和并发清理阶段、g2)和串行(Serial、SerialOld/PSMark-Sweep),按照算法分引用计数和跟踪算法,按照性能指标比如吞吐量(P
yueyemaitian
·
2011-10-25 00:00
cms
GC
并发收集
串行收集
并行收集
JVM学习
笔记八 之 对象创建和使用(对象生命周期系列)
一、对象创建类型信息在装载、连接和初始化之后,就可以使用了,可以访问类型的静态字段和方法,可以创建类型实例。对象的创建分为现实创建和隐式创建两种。显示创建分为:1、通过new创建;2、通过java.lang.Class的newInstance方法创建;3、通过clone方法创建;4、通过java.io.ObjectInputStream的readObject方法创建。隐式创建分为:1、启动类的ma
yueyemaitian
·
2011-10-24 23:00
对象隐式创建
显示创建对象
对象的内存表示
JVM学习
笔记七 之 初始化(类型的生命周期系列)
初始化阶段是为类型变量赋予正确的初始值,初始化分为两个阶段: 1、如果直接超类还没有进行初始化,则先初始化直接超类。 2、如果类存在一个初始化方法<clinit>,则调用该方法。 <clinit>是在编译java源码时,按照静态块和静态变量赋值语句的顺序生成的。如果类没有静态块也没有为静态变量赋值,就不会生成<clinit>方法,该方法只能被虚拟机
yueyemaitian
·
2011-10-24 02:00
装载
JVM学习
笔记六 之 连接(类型的生命周期系列)
一、概述类型的连接是指把字节码二进制静态结构合并到运行时状态中去。连接又分为验证、准备和解析三个阶段。二、验证验证装载到jvm中的字节码流的合法性。jvmspec没有规定具体做什么验证。根据不同的虚拟机实现大概又分为语法验证、语义验证、字节码流验证和引用验证。1、语法验证,校验字节码语法正确性,使得该类型信息可以存储在方法区内,如魔数、主次版本号、Utf8常量池表项中存储的是合法的utf8值、常量
yueyemaitian
·
2011-10-24 01:00
解析
验证
连接
准备
JVM学习
笔记五 之 装载(类型的生命周期系列)
一、概述 类型的生命周期分为装载、连接、初始化、实例的生命周期(使用)和卸载(实例化算是类型生命周期的一部分么?)。装载是指把表示类型信息的二进制字节码装入到内存。连接阶段包括验证、准备和解析,验证包括语法、语义、字节码流和引用验证;准备是给类变量分配内存并赋默认值;解析是把符号引用解析为直接饮用。初始化阶段是给静态变量赋值,包括静态语句和静态块里边的赋值操作。实例的生命周期阶段就包括类型实例
yueyemaitian
·
2011-10-18 00:00
jvm
装载
类型生命周期
JVM学习
笔记四 之 运行时数据区
一、概述运行时数据区是jvm运行时的内存布局,类装载到内存后存放的位置,为执行引擎提供所需指令和数据。运行时数据区包括:堆、栈、方法区、本地方法栈、pc计数器。接下来会详细介绍各个部分,并介绍直接内存访问和方法区中的常量池,另外对于每个区域可能发生的内存异常用demo做讲解。二、详细介绍各部分1、堆分配运行时产生的对象分配在堆中,但是并不是一定就分配在堆中,随着运行时编译器优化技术的不断进步,逃逸
yueyemaitian
·
2011-10-09 00:00
JVM学习
笔记三 之 ClassLoader
一、ClassLoader负责装载class文件;这个文件来源可能是压缩包、网络、运行时编译出的或者自动生成的class文件,jvmspec没有规定必须从什么地方加载。jvm中默认提供了三种系统类加载器:1)、启动类加载器BootstrapClassLoader,负责加载%JAVA_HOME%\jre\lib目录下的包,2)、扩展类加载器ExtClassLoader,负责加载%JAVA_HOME%
yueyemaitian
·
2011-10-05 00:00
jvm
ClassLoader
JVM学习
笔记二 之 .class文件
一、概述Java的源码编译后的class文件,具有非常严谨的结构,文件各个部分内容的完整性也通过自身描述来校验。开始描述class文件内容前,我们先定义一些说明:u1代表一个字节,也是两个16进制字符,u2、u4、u8分别代表2、4、8个字节二、类文件整体结构名称类型*长度字段含义魔数u4*1固定值,十六进制表示是CAFEBABE,表示该文件是一个class文件,装载类文件的时候就会校验前四个字节
yueyemaitian
·
2011-10-05 00:00
JVM学习
笔记一 之 概述
国庆放假没买到票,没回家,呆在住的地方,花了三天时间看了下>,算是对以前看过的《深入Java虚拟机》的一个有力补充,前者有很多作者实际的例子,后者偏向于理论上的东西,不过后者太老了。接下来对看过的这些东西做一下整理稍微做下记录,由于是读书笔记,内容结构上可能跟原书比较相似。一、java平台java平台由四部分组成:1、java语言2、javaapi3、javaclass文件结构4、javaviu
yueyemaitian
·
2011-10-04 22:00
jvm
虚拟机
JVM学习
笔记(一)------基本结构
来自http://blog.csdn.net/cutesource/article/details/5904501,非常好从Java平台的逻辑结构上来看,我们可以从下图来了解JVM:从上图能清晰看到Java平台包含的各个逻辑模块,也能了解到JDK与JRE的区别对于JVM自身的物理结构,我们可以从下图鸟瞰一下:对于JVM的学习,在我看来这么几个部分最重要:
gjanyanlig
·
2011-09-25 10:00
java
jvm
jdk
平台
JVM学习
笔记(四)------内存调优
首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和JavaVisualVM。对JVM内存的系统级的调优主要的目的是减少GC的频率和FullGC的次数,过多的GC和FullGC是会占用很多的系统资源(主要是CPU
ajian005
·
2011-09-18 19:00
java
jvm
jdk
工具
generation
JVM学习
笔记(三)------内存管理和垃圾回收
JVM内存组成结构JVM栈由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示:1)堆所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由FromSpace和ToSpace组成,结构图如下所示:新生代。新建的对象都是用新生代分配内存,Eden空间不足的时候,会把存活
ajian005
·
2011-09-18 19:00
JVM学习
笔记(一)------基本结构
从Java平台的逻辑结构上来看,我们可以从下图来了解JVM:从上图能清晰看到Java平台包含的各个逻辑模块,也能了解到JDK与JRE的区别对于JVM自身的物理结构,我们可以从下图鸟瞰一下:对于JVM的学习,在我看来这么几个部分最重要:Java代码编译和执行的整个过程JVM内存管理及垃圾回收机制下面将这两个部分进行详细学习
ajian005
·
2011-09-18 18:00
JVM学习
笔记之CLASS结构和动态链接模型
之前分析了方法调用和运行的过程,基本上可以满足代码层的需求了,不过为了更好的理解调用和运行的过程,还是分析下CLASS文件的结构和他动态链接的模型。 首先还是得看下CLASS文件的结构。CLASS文件的结构分为(只列了简单的总结,我目前也用不到太深入的):1.magic(魔数):是一个定值0xCAFEBAB
wupuyuan
·
2011-09-10 15:00
java
jvm
jdk
虚拟机
JVM学习
笔记之CLASS结构和动态链接模型
之前分析了方法调用和运行的过程,基本上可以满足代码层的需求了,不过为了更好的理解调用和运行的过程,还是分析下CLASS文件的结构和他动态链接的模型。 首先还是得看下CLASS文件的结构。CLASS文件的结构分为(只列了简单的总结,我目前也用不到太深入的):1.magic(魔数):是一个定值0xCAFEBAB
wupuyuan
·
2011-09-10 15:00
java
jvm
jdk
虚拟机
JVM学习
笔记--垃圾收集机制(1)
一、对象何时可回收:由于JAVA堆中存放着应用中的大部分对象实例,垃圾收集器在对堆进行收集前需要确定哪些对象实例应该回收,哪些不需要,这时就有相关的判断对象是否可回收的方法:引用计数算法、根搜索算法,其中后者是主流算法。这个算法的基本思路是通过一系列的GCROOT对象作为搜索起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当从GCROOT到某一个对象不可达时,则证明此对象是可回收的。在
cza55007
·
2011-09-05 22:31
Java
JVM学习
笔记(一)——JAVA内存区域
最近开始学习JVM,在此把学习中的体会记录下来。资料主要来源是《深入理解JAVA虚拟机》这本书,以及一些网上找的其他资料。目标JVM是HotSpot1、JAVA运行时数据区包括程序计数器、堆、虚拟机栈、本地方法栈、方法区2、内存区域可以分为“线程私有”和“线程共享”2种。比如程序计数器是属于线程私有的,为了在线程切换之后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器;而堆是线程共享的
kyfxbl
·
2011-09-04 00:00
HotSpot
jvm
虚拟机
JVM学习
笔记之方法运行
之前写了JVM对方法的调用过程,这里结合锁机制讲讲方法运行的过程。 首先方法运行是在JVM的“运行时数据区”进行的,所以得了解下运行时数据区,包括如下部分(基本定义为网上都有,这里仅仅做个介绍,详细的就不说了):PC寄存器:实现多线程基础,每个java虚拟机线程在运行某个方法时,如果方法是本地方法,则PC寄存器值没有定义,如果是则PC寄存器值记录JVM指令地址。栈:每个JVM线程在创建同时,会
wupuyuan
·
2011-08-25 09:00
java
jvm
虚拟机
框架
JVM学习
笔记之方法运行
之前写了JVM对方法的调用过程,这里结合锁机制讲讲方法运行的过程。 首先方法运行是在JVM的“运行时数据区”进行的,所以得了解下运行时数据区,包括如下部分(基本定义为网上都有,这里仅仅做个介绍,详细的就不说了):PC寄存器:实现多线程基础,每个java虚拟机线程在运行某个方法时,如果方法是本地方法,则PC寄存器值没有定义,如果是则PC寄存器值记录JVM指令地址。栈:每个JVM线程在创建同时,会
wupuyuan
·
2011-08-25 09:00
java
jvm
虚拟机
框架
JVM学习
笔记之方法调用
最近有空,继续写写jvm的学习笔记。这次写写java中的方法调用过程。 程序在有限的资源下运行当然是越快越好,这就离不开优化。一般来说都是业务逻辑优化(这也是最有效的),说到程序的运行的优化就不得不牵扯到JVM底层的字节码了。查看字节码的方法是javap -c **.class,这里建议 javap -c **.class >
wupuyuan
·
2011-08-25 09:00
java
jvm
方法
JVM学习
笔记之方法调用
最近有空,继续写写jvm的学习笔记。这次写写java中的方法调用过程。 程序在有限的资源下运行当然是越快越好,这就离不开优化。一般来说都是业务逻辑优化(这也是最有效的),说到程序的运行的优化就不得不牵扯到JVM底层的字节码了。查看字节码的方法是javap -c **.class,这里建议 javap -c **.class >
wupuyuan
·
2011-08-25 09:00
java
jvm
方法
上一页
25
26
27
28
29
30
31
32
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他