关于java vm的垃圾收集

一、sun jvm的自动收集与编程显式调用System.gc()是有区别的,

自动回收的线程级别是最低的,如果系统越来越繁忙,压力越来越大,那么自动回收的线程运行的机会就会变小,甚至不会运行,结果是内存不能释放;

不建议使用编程调用System.gc()是因为垃圾收集时,系统会挂起,而编程调用一般是定时处理的,并且用户线程度高于5,即肯定会被运行(这个我用过,回收效果明显,做过j2me的朋友肯定会有更深的体会的),所以系统也会定时地被挂起,也就影响到了系统的响应,但并不明显。

二、综上所述,在适当的时候调用System.gc()两次是合适的,注意“两次”只是个人经验,大家可以试验。

三、另外,sun jvm只适合开发环境,即启动速读比较快,

在产品或生产环境下,我建议大家使用jrocket vm,从bea的官方网站上可以免费下载;这个vm不仅具有并行和分代垃圾收集的功能(即垃圾收集线程和用户线程具有同等的优先级,并且可以同时运行,不会挂起系统;垃圾收集具有更细的粒度级),并且可以大幅度提高系统运行性能。

时间: 2024-10-01 23:08:34

关于java vm的垃圾收集的相关文章

浅谈JAVA VM 发展

淺談 Java VM 發展 Jim Huang <jimchyun @ ccns.ncku.edu.tw> <jserv @ kaffe.org> 略為整理筆者對 Java VM 實作的心得,與諸位分享,在本文後半部將專注於若干 Open Source Java VM 專案的探討,筆者本身是 KaffeVM [1] 開發者,很希望本文能對看倌有所幫助,更期待您的來信指教,藉由技術交流,讓 KaffeVM 有更好的發展. [1] http://www.kaffe.org/ ■ JVM

jvm系列(三):java GC算法 垃圾收集器

GC算法 垃圾收集器 概述 垃圾收集 Garbage Collection 通常被称为"GC",它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 java 堆和方法区中,在程序运行期间,这部分内存的分配和使用都是动态的.   对象存活判断 判断对象是否存活一般有两种方式: 引用计数:

eclipse启动失败的是java vm失败解决方法

解决方法: 1.问题现象   2.java虚拟机初始化失败!寻找eclipse解压路径   3.寻找eclipse初始化文件   4.右击打开(此处以ultraedit打开为例)   5.打开寻找初始化.虚拟机为java永久生成对象(Permanate generation)如,class对象.方法对象这些可反射(reflective)对象分配内存限制设置(原256,设置为128) 注意:此处设置不可太小,且有两处,图中已有标注   6.保存重启eclipse   说明:PermSize和Max

Java VM 参数描述

内部服务参数配置: JAVA_OPTS="-server -XX:+UseParNewGC -Xms1024m -Xmx2048m -XX:MaxNewSize=128m -XX:NewSize=128m -XX:PermSize=96m -XX:MaxPermSize=128m -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps

深入了解Java 5.0的垃圾收集

内存管理是影响软件应用程序性能的一个重要因素.与实际的数据计算时间相比,分配和卸载内存所用的时间更长. 虽然C++可对内存分配与释放进行直接控制,Java利用垃圾收集来回收程序不再需要的内存,试图掌握内存管理.但是,在需要实时性能时,与垃圾收集有关的"暂停"一直是人们反对应对Java的中心论点. 垃圾收集是一个周期性的过程,它中断程序的正常执行,分析对象引用,并回收被分配但不再被引用访问的内存.在大型Java应用程序中,垃圾收集暂停可能持续几秒钟,这段时间足以中断任何类型的实时通信或控

Java垃圾收集学习笔记

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 (1)除了释放不再被引用的对象,垃圾收集器还要处理堆碎块.请求分配新对象时可能不得不增大堆空间的大小,虽然可以使用的空闲空间是足够的,但是堆中没有没有连续的空间放得下新对象.可能会导致虚拟机产生不必要的"内存不足"错误. (2)使用垃圾收集堆,有一个潜在的缺陷就是加大程序的负担,可能影响程序的性能.因为虚拟机需要追踪哪些对象被正在执行的程序引用,还要动态释放垃圾对象. (3)程序可

Java学习笔记

笔记 本笔记是在看浙大翁恺老师的视频教学时所做,希望对Java初学者有帮助! 一.Java基础1.正确认识Java(1)Java是一种有生产力的OOP语言,C++能做的Java都能做(2)Java与网络关系不大,更不是用来做网页的(3)Java是UNIX世界的产物,具有UNIX的思想(4)Java在国外广泛的被用来做各种应用2.Java历史(1)Brithday:May 23,1995(2)1991:Set-Top box:Jame Gosling(3)1994:OAK and FirstPer

破除Java神话之一

对于java程序员而言,垃圾收集功能是一个非常大的帮助,同时也是使用java语言的一个非常大的优势. 然而,实际情况应该是不能因为垃圾收集可以清除无用的内存就不去考虑内存问题.这里要指明的是, 如果忽略这个问题,那么就会导致问题. 首先,在不同的JVM上垃圾收集算法是不同的,因此,如果你想你的程序能够很好的运行在不同的JVM上,那么就不能依赖垃圾收集的特定行为.垃圾收集是一个非常活跃的研究问题,更好.更快并且更精确的收集器总在实现中. 然而很多现代的垃圾收集器都有着同样的问题.其中一个是当他们运

深入探讨Java内存区域_java

一.概述 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干不同的数据区域,这些区域都有各自的用途以及创建和销毁的时间.Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下图所示: 下面就每一个区域进行阐述. 二.运行时数据区域 程序计数器 程序计数器,可以看做是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里,字节码解释器工作就是通过改变程序计数器的值来选择下一条需要执行的字节码指令,分支.循环.跳转.异常处理.线程恢复等基础功能都要依赖这个计数器来完成.