java
happylife1527
这个作者很懒,什么都没留下…
展开
-
深入Java内存区域与OOM
概述:对于从事C、C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又是执行最基础工作的劳动人民——拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任。 对于Java程序员来说,不需要在为每一个new操作去写配对的delete/free,不容易出现内容泄漏和内存溢出错误,看起来由JVM管理内存一切都很美好。不过,也正是因为Java程序员把内存控转载 2012-10-10 09:03:29 · 382 阅读 · 0 评论 -
字节码
理解JVM的指令的一个基础是理解JVM的栈内存,因此在开始之前最好先参阅一下《Java 栈内存介绍 》。本篇将结合例子对JVM的主要指令进行描述。 在开始之前,我们先了解一下如下的 “常识”:字长是根据JVM不同而定的,一般(并非一定)在32位机上是4个字节,64位机上是8个字节(使用8个字节很可能会潜在地存在内存浪费的情况),JVM规范上要求1个字必须至少能容纳integer转载 2012-10-10 12:06:33 · 887 阅读 · 0 评论 -
Class文件结构
http://www.cnblogs.com/focusj/archive/2012/03/01/2374604.html一.Class文件结构1. Class文件是一组以8位字节为基础的二进制流,采用一种类似C语言结构体的伪代码类存储。它只有两种数据类型:无符号数和表。2. 无符号数属于基本的数据类型,以u1,u2,u4,u8分表代表1个,2个,4个,8个字节。他可以用来描述数字,索转载 2012-10-10 13:55:48 · 320 阅读 · 0 评论 -
java虚拟机底层结构详解 .
本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 在以前的博客里面,我们介绍了在java领域中大部分的知识点,从最基础的java最基本语法到SSH框架。这里面应该包含了在java领域里面的大部分内容了吧。但是,那些知识点是让我们从一个应用的层面上了解了java,java程序真正底层的运行机制和一些底层虚拟机的工作我转载 2012-10-10 10:30:55 · 455 阅读 · 0 评论 -
jvm载入原理
jvm载入原理操作系统装入jvm是通过jdk中java.exe来完成,通过下面4步来完成jvm环境.1.创建jvm装载环境和配置2.装载jvm.dll3.初始化jvm.dll并挂界到JNIENV(JNI调用接口)实例 4.调用JNIEnv实例装载并处理class类。在我们运行和调试java程序的时候,经常会提到一个jvm的概念.jvm是java程序运行的环境,但是他同时转载 2012-10-10 11:39:26 · 310 阅读 · 0 评论 -
Java虚拟机参数学习-基本参数 .
Java虚拟机参数分为基本参数和扩展参数,本文主要详细介绍基本参数中各个参数的意义以及其用法。要查看Java虚拟机有哪些可选的参数配置,可以直接运行java命令,显示如下效果:下边分别介绍每个参数的用法:1. -client,-server这两个参数用于设置虚拟机使用何种运行模式,client模式启动比较快,但运行时性能和内存管理效率不如server模式,通常用于客户端应用转载 2012-10-10 11:41:38 · 416 阅读 · 0 评论 -
Java字节码(.class文件)格式详解(一)
http://www.cnblogs.com/rollenholt/articles/2176758.html转自:http://www.blogjava.net/DLevin/archive/2011/09/05/358033.html小介:去年在读《深入解析JVM》的时候写的,记得当时还想着用自己的代码解析字节码的,最后只完成了一部分。现在都不知道还有没有保留着,貌似Apa转载 2012-10-13 19:06:25 · 474 阅读 · 0 评论 -
Class文件实例解析
http://www.cnblogs.com/focusj/archive/2012/03/05/2375357.html前面发了几篇学习笔记,但是看这些东西总是感觉很"玄乎",来一篇实战的东西来揭一下"JVM"的面纱,让"SSH"时代的童鞋们来熟悉一下Java的"老祖爷"JVM。由于自己的水平有限,所以大家在看过程中发了什么问题,或者您有什么疑问请及时提出来,我及时解决。如果您有什么转载 2012-10-13 19:07:55 · 324 阅读 · 0 评论 -
Java二进制指令代码解析
http://www.cnblogs.com/rollenholt/articles/2176752.htmlJava二进制指令代码解析转自:http://www.blogjava.net/DLevin/archive/2011/09/13/358497.htmlJava二进制指令代码解析Java源码在运行之前都要编译成为字节码格式(如.class文件),然转载 2012-10-13 19:08:46 · 533 阅读 · 0 评论 -
Java字节码(.class文件)格式详解(二)
http://www.cnblogs.com/rollenholt/articles/2176759.htmlJava字节码(.class文件)格式详解(二)转自:http://www.blogjava.net/DLevin/archive/2011/09/05/358034.html2.9 methodsmethods数组记录了类或接口中的所有方法,包转载 2012-10-13 19:13:02 · 375 阅读 · 0 评论 -
Java字节码(.class文件)格式详解(三)
http://www.cnblogs.com/rollenholt/articles/2176760.html转自:http://www.blogjava.net/DLevin/archive/2011/09/05/358035.html2.11 在ClassFile、method_info、field_info中同时存在的Attribute2.11.1 Syn转载 2012-10-13 19:14:06 · 375 阅读 · 0 评论 -
Java字节码(.class文件)的代码解析
http://www.cnblogs.com/rollenholt/articles/2176753.html转自:http://www.blogjava.net/DLevin/archive/2011/09/13/358498.htmlJava二进制指令代码以以下格式紧凑排列(opcode占一个字节):opcode operand*除了tableswitch和转载 2012-10-13 19:14:39 · 476 阅读 · 0 评论 -
[Java性能剖析]前言
最近在学习Java性能剖析方面的主题,理论方面涉及Sun JVM内存管理和垃圾回收、JPDA技术、JVM manage API和Sun JVM Attach API(非标准),并熟悉了一些常用的JVM 剖析工具,包括Sun JDK自带的jps/jinfo/jstat/jstack/jmap/jhat/jconsole/VisualVM,以及一些开源的剖析工具包括Eclipse Memory Ana转载 2012-10-10 12:01:18 · 369 阅读 · 0 评论 -
类加载器(中)类的初始化 .
上接深入java虚拟机——深入java虚拟机(二)——类加载器详解(上),在上一篇文章中,我们讲解了类的生命周期的加载和连接,这一篇我们接着上面往下看。 类的初始化:在类的生命周期执行完加载和连接之后就开始了类的初始化。在类的初始化阶段,java虚拟机执行类的初始化语句,为类的静态变量赋值,在程序中,类的初始化有两种途径:(1)在变量的声明处赋值。(2)在静态代码块处赋值,转载 2012-10-10 10:52:47 · 495 阅读 · 0 评论 -
Java虚拟机结构与内存溢出 .
Java虚拟机(Java Virtual Machine,JVM)定义了多种运行时数据区,这些数据区用于程序的执行期间。一些数据区在Java虚拟机启动时创建,在Java虚拟机退出时销毁,而其它的数据区则是针对每个线程的。针对每个线程的数据区在创建线程时创建并在该线程退出时销毁。Java进程堆(Java Process Heap)Java运行为一个单一的进程,并且不与别的进程共享转载 2012-10-10 11:08:32 · 368 阅读 · 0 评论 -
Java 栈内存介绍
本篇我们了解一下Java的栈内存空间。 1.我们首先从Intel80386架构下的Linux汇编开始,看看会把什么东西存放在栈中。在开始之前,需要注意一点,Intel80386架构下的linux系统的堆是从高位地址往低位地址增长的。 我们看一个简单的例子,计算从1加到100,文件存储为test.cC代码 int sum(int max);转载 2012-10-10 12:00:06 · 468 阅读 · 0 评论 -
JVM主要组成
如同讲汇编必先讲计算机组成原理,在开始字节码之前,我们先了解一下JVM的主要构成。 在JVM的内部,主要由如下几个部分构成: 1.数据区方法区:存放类定义信息、字节码、常量等数据,在Sun HotSpot JVM中,这块也称为Perm Gen。堆:创建的对象信息将放入堆中,堆内部如何实现各虚拟机各不相同,对于Sun HotSpot JVM来说又分为Young Gen和Tenu转载 2012-10-10 12:03:20 · 740 阅读 · 0 评论 -
常量池和符号解析
1.常量池 在符号解析的过程当中,常量池扮演着非常重要的工作。JVM会在常量池中定义如下信息:字符型数据:utf-8,包括使用常量定义、方法名称、类名称、属性名称等等,这个类型一般用于定义其他类型所关联的字串信息数字型常量:long、integer、double、float,包括使用到的一些常量定义String常量:string,包括字串常量定义类和引用信息:包括Class、转载 2012-10-10 12:05:29 · 650 阅读 · 0 评论 -
Java 查看java字节码(有图)
查看java字节码 1 javac –verbose查看运行类是加载了jar文件HelloWorld演示: Java代码 public class HelloWorld { public static void main(String args[]) { System.out.println("Hello World!")转载 2012-10-10 12:10:39 · 714 阅读 · 0 评论 -
实战OutOfMemoryError
上述区域中,除了程序计数器,其他在VM Spec中都描述了产生OutOfMemoryError(下称OOM)的情形,那我们就实战模拟一下,通过几段简单的代码,令对应的区域产生OOM异常以便加深认识,同时初步介绍一些与内存相关的虚拟机参数。下文的代码都是基于Sun Hotspot虚拟机1.6版的实现,对于不同公司的不同版本的虚拟机,参数与程序运行结果可能结果会有所差别。 Java堆转载 2012-10-10 09:03:57 · 412 阅读 · 0 评论 -
Java中堆(heap)和栈(stack)的区别
程序执行的过程: 程序从硬盘载入的内存->有四个内存区供程序使用 heap(堆 ),stack(栈),data segment,code segment heap堆:用来存放new出来的东西 stack栈:局部变量。 data segment:静态变量,字符串常量。 code segment:存放代码 堆(heap)和栈(stack)的区别:1. 栈(stac转载 2012-10-10 10:00:15 · 452 阅读 · 0 评论 -
java虚拟机的垃圾回收机制 .
http://blog.csdn.net/csh624366188/article/details/8042649 Java语言从出现到现在,一直占据编程语言前列,他很大的一个原因就是由于java应用程序所运行的平台有关。我们大家都知道java应用程序运行在java虚拟机上。这样就大大减少了java应用程序和底层操作系统打交道的频率。这也就为java程序的跨平台提供了良好的基础。在java虚拟转载 2012-10-10 11:00:32 · 472 阅读 · 0 评论 -
Java方法传递参数说明
我们都知道,Java中对于基本数据类型作为方法参数时,都是值传递。那么对象作为方法的参数,又是传递的什么呢?java的方法参数都是传值,没有传引用。很多人都以为是传引用,而且这种错误的观点很普遍,今天在这里具体分析一下。方法参数有基本类型,如int等,另外一种类型是OBJECT,对象。详细说一下方法参数是对象的,JAVA方法参数传对象,传的是对这个对象引用的一份拷贝,即地址值,跟原来的引用转载 2012-10-10 10:03:27 · 369 阅读 · 0 评论 -
类加载器详解(上) .
本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 类加载器,顾名思义,类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码转载 2012-10-10 10:44:21 · 454 阅读 · 0 评论 -
常量池和符号解析
http://ayufox.iteye.com/blog/670621 1.常量池 在符号解析的过程当中,常量池扮演着非常重要的工作。JVM会在常量池中定义如下信息:字符型数据:utf-8,包括使用常量定义、方法名称、类名称、属性名称等等,这个类型一般用于定义其他类型所关联的字串信息数字型常量:long、integer、double、float,包括使转载 2012-10-13 19:15:24 · 405 阅读 · 0 评论