JVM_Tag标签_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
当前位置:程序员俱乐部 >>Tag标签 >> JVM >>列表
深入了解JVM、JRE、JDK三者的联系JVM:JavaVirtualMachine(Java虚拟机)。所谓“虚拟机”顾名思义就是模拟出来的东西。就像是我们在用电脑看电视,但是电脑里并没有像电视机里面一样的硬件支持,但是我们仍然可以从电脑里接受电视台的节目。那是因为我们编写了一个可以模拟电视机硬件工作的软件运行在电脑的平台上面的原因。同样JVM就是模拟了电脑的硬件,它同样有着像CPU一样可以执行代码的功能。它的实现具体有:指令集寄存器组类文件格式栈垃圾收集堆内存区... 查看全文
· JVM参数对J2EE性能优化的影响 发布时间:2011-11-25
一切J2EE应用都是基于JVM的,那么对于JVM的设置和监控,成为J2EE应用程序性能分析和性能优化的必然手段。今天Sincky和大家交流该话题。这里以Tomcat环境为例,其它WEB服务器如Jboss、Weblogic、Websphere完全一致。【认识JVM】首先我们来看一张图,这是目前JDK1.6版本自带的JVM性能监控工具VisualVM的一个插件VisualGC的显示情况。让我们先来了解JVM的内存堆Heap管理模式,要调整JVM,自然要知道它的内部结构和运作,此乃“知己知彼... 查看全文
· jvm学习笔记总结发布时间:2011-11-22
为什么要深入学习jvm?从事java开发有几年的时间了,以前对jvm了解不够深入。项目中遇到一些问题,深刻体会到不是代码层级可以解决的。很多问题难以解决之处在于你发现不了问题源头。例如服务器的tps上不去,瓶颈在哪里?程序内存溢出,什么原因造成的?如何监控程序运行的状况?为此,特意抽出时间,系统学习了jvm的相关原理,希望更深刻得了解java运行的机制。总之,学习jvm,能让你站更高处看问题。主要看了几本书1.《深入java虚拟机》是jvm领域的经典图书,已经绝版了,里面的内容很详细... 查看全文
· JVM中可生成的最大Thread数量 发布时间:2011-11-22
最近想测试下Openfire下的最大并发数,需要开大量线程来模拟客户端。对于一个JVM实例到底能开多少个线程一直心存疑惑,所以打算实际测试下,简单google了把,找到影响线程数量的因素有下面几个:-Xmsintialjavaheapsize-Xmxmaximumjavaheapsize-Xssthestacksizeforeachthread系统限制系统最大可开线程数测试程序如下:importjava.util.concurrent.atomic.AtomicInteger... 查看全文
· jvm学习笔记(1)class文件发布时间:2011-11-22
简述class文件是什么?稍微接触过java的同学都会说:就是java源文件编译后的.class文件。这句话虽然对,但是不够准确。其他语言,例如scala,jruby等,都可以编译出class文件。class文件是能被jvm识别和运行的一种文件格式。它是八位的二进制流文件。今天就跟大家一起学习class文件的格式整体结构用ultraedit等工具打开class文件,看到的都是二进制。首先要了解哪几位代表什么标志?这里用u1,u2,u4,u8,代表属性占用多少个字节。格式... 查看全文
· jvm学习笔记(5)垃圾收集器介绍发布时间:2011-11-22
简述:上一篇系统学习了各种垃圾算法。现在就看看jvm(HopSpot)提供了那些垃圾收集器,怎样搭配使用。先回忆了,然后思考以下问题:新生代和老年代分别用什么算法合适?Serial收集器略懂英文的同学大概明白这个词的意思,串行,连续的。没错,这个收集器很简单,当要进行gc时,就暂停所有线程。用复制算法执行完,继续所有线程。又用餐巾纸的例子来说明,清洁大妈高喊一声“stop”,然后所有人静止不动,等收集完,大伙又继续吃饭。有些java程序平时运行正常,隔一段时间“假死”,很可能与它有关... 查看全文
· jvm学习笔记(6)类加载机制发布时间:2011-11-22
简述我们要运行java程序,必须保证jvm已经加载类所需的类。这个过程是怎样的呢类的生命周期包括了装载,连接(包括验证、准备和解析)和初始化加载将二进制字节码读入jvm。包括以下阶段:1.通过类的全限定名获得定义此类的二进制数据流2.将字节流转化为方法区的内部数据结构3.在jvm堆中生成java.lang.Class实例,成为java程序与内部数据结构之间的接口怎么生成二进制流?有很多种方式,例如本地文件系统加载,网络下载,jar提取,动态编译等。类加载器不需要等到某个类型初次时候才装载... 查看全文
原帖地址:http://java.ociweb.com/mark/clojure/article.html#Testing作者:R.MarkVolkmann译者:RoySong自动化测试Clojure基本的自动化测试框架就在Clojure核心代码的测试库中。下面的代码展示了它的主要功能:(use'clojure.test);Testscanbewritteninseparatefunctions.(deftestadd-test;The"is"macrotakesapredicate... 查看全文
原帖地址:http://java.ociweb.com/mark/clojure/article.html#Metadata作者:R.MarkVolkmann译者:RoySong元数据(Metadata)Clojure的元数据是附属于符号或者集合的数据,而没有具体的逻辑值。两个对象在逻辑上相同,就像扑克中的两张王相同,能够拥有不同的元数据。举个例子,元数据能够用来指明某张扑克是否是弯的。而对于大部分扑克游戏来说,事实上扑克是否是弯的完全跟扑克的价值无关:(defstructcard... 查看全文
本文是Neward&Associates的总裁TedNeward为developerworks独家撰稿“你不知道java秘密”系列中的一篇,JVM是多数开发人员视为理所当然的Java功能和性能背后的重负荷机器。然而,我们很少有人能理解JVM是如何进行工作的—像任务分配和垃圾收集、转动线程、打开和关闭文件、中断和/或JIT编译Java字节码,等等。不熟悉JVM将不仅会影响应用程序性能,而且当JVM出问题时,尝试修复也会很困难。本文将介绍一些命令行标志... 查看全文
1、在堆上分配对象的代价十分高昂,然而java的垃圾回收机制可以和其他语言从堆栈上分配空间的速度想媲美,但是,释放对上的存储空间也有开销;2、当它工作的时候,将一面回收空间,一面使堆中的对象紧凑排列。这样就尽量避免了页面错误。通过垃圾回收器对对象重新排列,实现了一种高速的、有限空间可供分配的堆模型;3、其他系统的垃圾回收机制:a、引用计数是一种简单但速度很慢的垃圾回收计数。每个对象都含有一个引用计数器,当有引用链接至对象时,引用计数加1,当引用离开作用于或者被设置为null时,引用计数减1... 查看全文
· My Favorite Hotspot JVM Flags 发布时间:2011-10-13
MyFavoriteHotspotJVMFlagsIprobablystartupaJVMathousandtimesaday.Testruns,benchmarkruns,bugconfirmation,APIexploration,orrunningactualapps.Andinmanyoftheseruns,IusevariousJVMswitchestotweakperformanceorinvestigateruntimemetrics... 查看全文
· JVM问答发布时间:2011-10-06
大部分内容来源网络,整理一下,留个底。问:堆和栈有什么区别?答:堆是存放对象的,但是对象内的临时变量是存在栈内存中,如例子中的methodVar是在运行期存放到栈中的。栈是跟随线程的,有线程就有栈,堆是跟随JVM的,有JVM就有堆内存。问:堆内存中到底存在着什么东西?答:对象,包括对象变量以及对象方法。问:类变量和实例变量有什么区别?答:静态变量是类变量,非静态变量是实例变量,直白的说,有static修饰的变量是静态变量,没有static修饰的变量是实例变量。静态变量存在方法区中... 查看全文
· JVM 运行时数据区域发布时间:2011-10-06
Java虚拟机管理的内存包括以下几个运行时数据区域:1.程序计数器:程序计数器是一块比较小的内存空间,是当前线程执行的字节码行号指示器。Java多线程是通过线程轮流切换来实现的,所以每个线程都有一个自己独立的程序计数器,各个线程的程序计数器互补干扰。2.Java虚拟机栈Java虚拟机栈描述的是Java方法的执行模型:每个方法执行的时候都会创建一个帧栈用于存放局部变量表,操作栈,动态链接,方法出口等信息。一个方法的执行过程,就是这个方法对于帧栈的入栈出栈过程。3... 查看全文
· JVM 垃圾回收算法发布时间:2011-10-06
在说垃圾回收算法之前,先谈谈JVM怎样确定哪些对象是“垃圾”。1.引用计数器算法:引用计数器算法是给每个对象设置一个计数器,当有地方引用这个对象的时候,计数器+1,当引用失效的时候,计数器-1,当计数器为0的时候,JVM就认为对象不再被使用,是“垃圾”了。引用计数器实现简单,效率高;但是不能解决循环引用问问题(A对象引用B对象,B对象又引用A对象,但是A,B对象已不被任何其他对象引用),同时每次计数器的增加和减少都带来了很多额外的开销,所以在JDK1.1之后,这个算法已经不再使用了。2... 查看全文
· JVM知识小分享发布时间:2011-09-24
差点忘记补充了,赶紧补补。今天由于带了笔记本偷懒了,今天没有骑车,这周一共骑了50公里。实际上Java的内存不需要程序员手动创建和回收的,这一切都由JVM帮我们做掉了,这样做的好处是学容易出现内存泄漏和内存溢出的问题。一旦出现了内存溢出或是内存泄漏,对不了解JVM原理的人,排查错误将会成为一项异常艰难的工作。线程私有的,每一个Java线程都有一个程序计数器来用于保存程序执行到当前方法的哪一个指令,它的作用可以看做是当前线程所执行的字节码的行号指示器。Java堆内还有更细致的划分:新生代、老年代... 查看全文
2.3JVM的垃圾收集策略GC的执行时要耗费一定的CPU资源和时间的,因此在JDK1.2以后,JVM引入了分代收集的策略,其中对新生代采用"Mark-Compact"策略,而对老生代采用了“Mark-Sweep"的策略。其中新生代的垃圾收集器命名为“minorgc”,老生代的GC命名为"FullGc或者MajorGC".其中用System.gc()强制执行的是FullGc.2.3.1SerialCollectorSerialCollector是指任何时刻都只有一个线程进行垃圾收集... 查看全文
· JVM类加载器发布时间:2011-09-09
1.类加载器类加载器(ClassLoader)用来加载Java类到Java虚拟机中。一般来说,Java虚拟机使用Java类的方式如下:Java源程序(.java文件)在经过Java编译器编译之后就转换成Java字节码(.class文件)。类加载器负责读取Java字节码,并转换成java.lang.Class类的一个实例。每个这样的实例用来表示一个Java类。通过实例的newInstance()方法就可以创建出该类的一个对象。实际的情况可能更加复杂,比如Java字节代码可能是通过工具动态生成的... 查看全文
· 【转】JVM内存回收理论与实现发布时间:2011-09-06
转载地址:http://www.infoq.com/cn/articles/jvm-memory-collection... 查看全文
· 深入Java,初探JVM发布时间:2011-08-24
走进JVM,浅水也能捉鱼!这不是一篇描述jvm是什么的文章,也不介绍jvm跨平台的特性,也不是讲述jvm安全特性的文章,更不是讲解jvm指令操作,数据运算的文章,本文重点讲述类型的生命周期。类型的生命周期涉及到:类的装载、jvm体系结构、垃圾回收机制。为什么要讲jvm体系结构?因为类的装载和垃圾回收机制都和jvm体系结构息息相关。那么什么是jvm体系结构呢?当jvm运行起来的时候,它会向系统申请一片内存区(不同的jvm实现可能不同,有些可以使用虚拟内存),将这块内存分出一部分存储许多东西,例如... 查看全文