JVM知识
扁舟
善于学习
展开
-
Java内存泄露问题
内存泄露 所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中。 java中有垃圾回收机制,它可以保证一对象不再被引用的时候,即对象编程了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉。由于Java 使用有向图的方式进行垃圾回收管理,可以消除引用循环的问题,例如有两个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的,例如下面的代码可以看到...原创 2011-01-31 14:37:07 · 74 阅读 · 0 评论 -
Java 虚拟机体系结构
众所周知,Java源代码被编译器编译成class文件。而并不是底层操作系统可以直接执行的二进制指令(比如Windows OS的.exe文件)。因此,我们需要有一种平台可以解释class文件并运行它。而做到这一点的正是Java 虚拟机(JVM)。 实际上,JVM是一种解释执行class文件的规范技术。各 个提 供商都可以根据规范,在不同的底层平台上实现不同的JVM。 下面是JVM实现...原创 2011-01-31 14:50:34 · 94 阅读 · 0 评论 -
Class文件内容及常量池
当JVM运行Java程序的时候,它会加载对应的class文件,并提取class文件中的信息存放在JVM开辟出来的方法区 内存中。那么这个class文件里面到底有些什么内容呢? 一、class文件内容概述 class文件是由8bits的字节流组成,全部字节构成了15个有意义的项目。这些项目之间没有任何无意义的字节,因此class文件非常紧凑。占据多字节空间的项目按照高位在前的顺序存...原创 2011-01-31 14:49:28 · 77 阅读 · 0 评论 -
JVM垃圾回收机制总结(1) —基本概念
数据类型 Java虚拟机中,数据类型可以分为两类:基本类型 和引用类型 。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。 基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress ...原创 2011-01-31 14:48:36 · 78 阅读 · 0 评论 -
JVM垃圾回收机制总结(2) —基本算法概述
1、引用计数收集器 (Reference Counting) 引用计数是垃圾收集的早期策略。在这种方法中,堆中每一个对象都有一个引用计数。一个对象被创建了,并且指向该对象的引用被分配给一个变量,这个对象的引用计数被置为1。当任何其他变量被赋值为对这个对象的引用时,计数加1。当一个对象的引用超过了生存期或者被设置一个新的值时,对象的引用计数减1。任何引用计数为0的对象可以被当作...原创 2011-01-31 14:47:49 · 90 阅读 · 0 评论 -
JVM垃圾回收机制总结(3) —按代垃圾收集器
为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的 。 因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。 在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象、线程、Socket连接,这类对象跟业务直接挂钩,因此生命周期比较长。但是还有一些对象,主要是程序...原创 2011-01-31 14:47:03 · 104 阅读 · 0 评论 -
JVM垃圾回收机制总结(4) —新一代的垃圾回收算法
垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限。但是他无法解决的一个问题,就是Full GC所带来的应用暂停。在一些对实时性要求很高的应用场景下,GC暂停所带来的请求堆积和请求失败是无法接受的。这类应用可能要求请求的返回时间在几百甚至几十毫秒以内,如果分代垃圾回收方式要达到这个指标,只能把最大堆的设置限制在一个相...原创 2011-01-31 14:45:49 · 90 阅读 · 0 评论 -
JVM垃圾回收机制总结(5) —JDK垃圾收集器的配置命令
以下配置主要针对分代垃圾回收算法而言。 堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。 ...原创 2011-01-31 14:44:55 · 87 阅读 · 0 评论 -
JVM垃圾回收机制总结(6)—透视Java的GC特性
1、 使用 System.gc() 可以不管JVM使用的是哪一种垃圾回收的算法,都可以请求 Java的垃圾回收。 在命令行中有一个参数-verbosegc可以查看Java使用的堆内存的情况,它的格式:java -verbosegc classfile class TestGC { public static void main(String[] args...原创 2011-01-31 14:44:04 · 71 阅读 · 0 评论 -
JVM垃圾回收机制总结(7) —调优方法
JVM调优工具 Jconsole,jProfile,VisualVM Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。 JProfiler :商业软件,需要付费。功能强大。详细说明参考这里 VisualVM :JDK自带,功能强大,与JProfiler类似。推荐。 如何调优 观察内存释放情况、集合类检查...原创 2011-01-31 14:43:00 · 72 阅读 · 0 评论 -
JVM垃圾回收机制总结(8)—反思和参考资料
垃圾回收的悖论 所谓“成也萧何败萧何”。Java的垃圾回收确实带来了很多好处,为开发带来了便利。但是在一些高性能、高并发的情况下,垃圾回收确成为了制约Java应用的瓶颈。目前JDK的垃圾回收算法,始终无法解决垃圾回收时的暂停问题,因为这个暂停严重影响了程序的相应时间,造成拥塞或堆积。这也是后续JDK增加 G1算法的一个重要原因。 当然,上面是从技术角度出发解决垃圾回收带来的问...原创 2011-01-31 14:41:07 · 101 阅读 · 0 评论 -
JVM加载class文件的原理
当Java编译器编译好.class文件之后,我们需要使用JVM来运行这个class文件。那么最开始的工作就是要把字节码从磁盘输入到内存中,这个过程我们叫做【加载 】。加载完成之后,我们就可以进行一系列的运行前准备工作了,比如: 为类静态变量开辟空间,将常量池存放在方法区内存中并实现常量池地址解析,初始化类静态变量等等。这篇文章我们要好好谈谈JVM是如何加载class文件的? 1、JVM加载...原创 2011-01-31 14:39:03 · 85 阅读 · 0 评论 -
J2SE 四大技术体系
讲到Java,很容易就想到程序设计语言。实际上,Java技术包含的内容远不止一种编程语言怎么简单。我们通常说的J2SE(java 2 标准版)就是在全局上对Java技术的一种称呼。 1、J2SE技术体系结构 下图包含了J2SE体系结构的全部重大相关技术,也描述了java程序运行不可缺少的过程。 要精通J2SE,必须对J2SE的四大重要技术有深入的了解。 (1) Java...原创 2011-01-31 14:51:07 · 116 阅读 · 0 评论