移动学习网 导航

弱弱的问一句 jvm full gc到底是啥意思 “系统学习”是什么意思?

2024-05-04m.verywind.com
学习是一个什么样的过程? 为什么? 急!!!!!!!!!!!!!!!~

学习是一个过程。对人来说,学习是一个很复杂的过程。由于它的复杂性,人们曾从多方面进行过分析。学习是如何发生的,如何进行的,它的结构是什么,历来人们从不同的观点和角度对它进行分析。我国古代儒家的学习心理思想就曾把学习划分为若干个阶段。孔子在他的教育言论中说过这样一些话:“吾十有五而志于学。”(《论语·为政》)“学而不思则罔,思而不学则殆。”“学而时习之,不亦说乎。”(《论语·学而》)“弗学,何以行。”(《治学篇》)根据这些话,很显然,孔子是把学习过程划分为立志、学、思、习、行等阶段的。孔子的学习过程阶段说在《中庸》一书中得到了继承和发扬。《中庸》引用孔子的话说:“博学之,审问之,慎思之,明辨之,笃行之。”这里的五个阶段与孔子提到的几个阶段的思想是一致的。只是把“思”的阶段又细分为“审问”“慎思”“明辨”三个阶段。结合《论语》和《中庸》的论述来考察孔子的学习过程阶段说,可以看出孔子对学习过程是划分为七个阶段的,那就是立志、博学、审问、慎思、明辨、时习、笃行。用现代的话来说,立志就是激发学习动机,博学就是多见多闻,审问就是多问多疑(不是怀疑一切),慎思就是学思结合,明辨就是形成明确的概念,时习就是及时复习,笃行就是学以致用。孔子关于学习过程的七个阶段的观点,虽然是一些古典语言的表述,但内容有一定的道理,基本符合学习的具体过程,只要我们善于批判继承,这个观点仍具有现实的意义。

19世纪德国心理学家和教育家赫尔巴特把学习划分为连续进行的四个步骤,即明了、联想、系统和方法。实际这就是学习的四个阶段。这几个步骤后来被美国赫尔巴特派发展为五个步骤:“明辨”变成“准备和提示”;“联想”变成“比较和抽象”;“系统”变成“概括”;“方法”变成“应用”。这些步骤的运用表示学生的学习是在教师指导下,首先把有关的观念引进思想,即进行准备(preparation)。如学习物理中的漂浮原理,可让学生想起他们已有的关于漂浮物体的经验。第二是指示(presentation),如通过种种演示方法介绍关于漂浮的事实。第三是比较和抽象(comparison and abstraction)。通过教师的启迪,完成最初两个步骤,学生将发现新的事实和那些已经知道的事实有相似之处,因此,在学生的思想里,新旧观念结合起来。这时学生将会看到这两种事实相互吸引的共同要素的性质,把这个共同要素拣选起来,便是抽象。第四是概括(generalization)。在这个步骤里,学生尝试把新旧两种事实的共同要素作为一个原理概括来命名,于是得出漂浮原理。第五是应用(application)。学生掌握了这个新习得的原理就可以用来解释有关漂浮的事实或问题,这一般是通过作业来进行的。这就是赫尔巴特提出的著名的学习过程(或称教学过程)的五个步骤。赫尔巴特主义有许多缺点,然而他对教育心理学的发展曾作出一些贡献,特别是他强调经验背景在知觉过程中的作用具有重要意义。

所谓系统学习法,是指把所学内容当成是一个系统看待,力求从大方向出发指导学习,这样,在学习和复习的时候不是按部就班按章节行进,而是先模糊概括,再逐渐在大框架下逐步明晰细节、完善结构、针对缺陷和不足专攻的学习方法。\x0d\x0a\x0d\x0a一、系统学习法的层次\x0d\x0a系统学习法有四种层次,从低到高依次为:\x0d\x0a1、树状结构。\x0d\x0a最初,树状结构从大轮廓理顺。这可以看书的目录。\x0d\x0a其次,是心中有了这种轮廓,对书本以最快速度阅读。自己在心中找出脉络,归纳总结重点,有所取舍。\x0d\x0a大轮廓,即第一层分支(章)了解以后,可以理第二层分支(节)。掌握的标准是能够离开书本不杂不漏地口头复述。\x0d\x0a对于课本或应试复习,第三层分支一般是指每一个知识点的概念、定义、特点和状态描述、另外形态、适用范围、来由和出处、引申和发展、分支、作用、交叉归属、历史和方向这几个方面。在看书、理关系的时候就要不断地提问自己这些问题,为自己找到答案。如果这些方面在教材上讲的不具体不全面,可以到图书馆或书店查阅相关的材料,和同学探讨,也可以询问老师和经验丰富的人。\x0d\x0a经常回忆轮廓甚至整一棵树,发现有含糊、不明确的部分要尽快翻阅教材或相关资料,在模糊处再看一次。掌握的标准是能够清晰地用自己的语言表述。\x0d\x0a初学者可参照课本的目录,理顺关系。系统学习法用得熟练以后,应该是自己归纳总结出树状结构。\x0d\x0a\x0d\x0a2、网状联系。\x0d\x0a在学习的时候,应该有这种观念:任何学习的内容,都是相互联系,相互作用的。而任何出题都不过是这些关系的形式转化(变形)、叠加而已。\x0d\x0a因此第一步就是找出各部分间的直接联系,把网络结构初步地建立起来。但是有些部分和其他部分并不一定能够建立直接的联系,那么还需要发掘第二层、第三层关系。\x0d\x0a要明确各部分之间的关系,以及综合运用。\x0d\x0a要在这过程中学会给自己出题,或者出题给别人做。讲究出题的水准。\x0d\x0a这个阶段掌握的标准是能够把大的网络通过适当的语言充分地表述出来,能够让别人通过你的叙述听懂这些关系。\x0d\x0a\x0d\x0a3、由点及面。\x0d\x0a由于各部分间存在着联系,由每一个部分都可以拉起树状结构。\x0d\x0a每一个部分都可以是中心,都可以是基础,都可以充分有效地发散开,让其他部分为其服务。\x0d\x0a这已经是游刃有余的境界。\x0d\x0a\x0d\x0a4、包容。\x0d\x0a引入其他学科,或生活实践。\x0d\x0a这样,学习一门学科可以提高其他学科]的认识和境界。\x0d\x0a在我们碰到一个学习内容的时候,就应该力图将它统一到自己已经掌握的知识体系中。分析以上三种层次,其实不过是将学习内容清晰化,找出种种特征,共性和外界关系的接口,从而在邻近的知识域中与自己熟悉的内容结合,并启发思维,拓展认识空间。以火把的更多加入照亮更广阔的空间。黑暗中,智慧和希望就是光明。\x0d\x0a学科之间并不是割裂的。教育中把他们区分只是为了更清楚地看到他们,了解他们,不被复杂的联系蒙住眼睛、理不出头绪。但它们本身就是社会的各方面,甚至是同一事物的不同视角。它们能够结合,是理论的必然,如果能够结合,我们将会迅速提升自己的境界,可以说是“悟”,在“知”和“行”的基础上让人豁然开朗。\x0d\x0a这样学到的东西,是真正自己的东西,谁都抢不去。哪怕会有遗忘,也会在最短的时间内有效地捡起。\x0d\x0a\x0d\x0a所谓层次,是针对境界来说的,因为我认为,学习就是一种境界的提高,只不过是看量变有没有积累到质变而已。在还没有真正掌握系统学习法的时候,可以简单地把层次理解为步骤。按照这几种步骤来学。\x0d\x0a我们可以看到,前两个层次可以归类为认知层次。如果能清晰认知,细致关联,要应付并考好各类考试是不成问题的。\x0d\x0a后两个层次更多的是知识的组织和再造,可以归类为认识创新。这不但是要懂得,更多地是要思考,要建立属于自己的知识体系。\x0d\x0a人都存在着发展需求。人对发展的放弃,并不是由于他不想发展,而是他看不到希望,失去了信心。如果给他以比较殷实的基础,他不会满足于已经取得的成就。他会追求自我实现。系统学习法就是为了最快、最有效地结构这一基础。我们没有必要在开始的时候强调后两个层次。等前两个层次都比较出色地达到以后,人自然而然地会从认识的限制中跳出来,对自己提出更高的期望和要求。这时稍加指点,就会愉悦于后两个层次豁然开朗的光明境界,渐渐凝聚自觉、系统认知的动力。

JVM 内置的通用垃圾回收原则,堆内存划分为 Eden、Survivor 和 Tenured/Old 空间。GC一共分三种:MinorGC,Major GC v和Full GC。Full GC是清理整个堆空间—包括年轻代和永久代。有时候系统会频繁的FullGC,这时候需要去服务器查一下原因。

当编辑并运行一个Java程序时,需要同时涉及到这四种方面。使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义不同的类  ,通过调用类(这些类实现了Java API)中的方法来访问资源系统,把源文件编译生成一种二进制中间码,存储在class文件中,然后再通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的Java API调用。

扩展资料

触发Full GC执行的情况有如下四种。旧生代空间不足

1.旧生代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行Full GC后空间仍然不足,则抛出如下错误:

java.lang.OutOfMemoryError: Java heap space

为避免以上两种状况引起的FullGC,调优时应尽量做到让对象在Minor GC阶段被回收、让对象在新生代多存活一段时间及不要创建过大的对象及数组。

2. Permanet Generation空间满

PermanetGeneration中存放的为一些class的信息等,当系统中要加载的类、反射的类和调用的方法较多时,Permanet Generation可能会被占满,在未配置为采用CMS GC的情况下会执行Full GC。如果经过Full GC仍然回收不了,那么JVM会抛出如下错误信息:

java.lang.OutOfMemoryError: PermGen space

为避免Perm Gen占满造成Full GC现象,可采用的方法为增大Perm Gen空间或转为使用CMS GC。

3. CMS GC时出现promotion failed和concurrent mode failure

对于采用CMS进行旧生代GC的程序而言,尤其要注意GC日志中是否有promotion failed和concurrent mode failure两种状况,当这两种状况出现时可能会触发Full GC。

promotionfailed是在进行Minor GC时,survivor space放不下、对象只能放入旧生代,而此时旧生代也放不下造成的;concurrent mode failure是在执行CMS GC的过程中同时有对象要放入旧生代,而此时旧生代空间不足造成的。

应对措施为:增大survivorspace、旧生代空间或调低触发并发GC的比率,但在JDK 5.0+、6.0+的版本中有可能会由于JDK的bug29导致CMS在remark完毕后很久才触发sweeping动作。对于这种状况,可通过设置-XX:CMSMaxAbortablePrecleanTime=5(单位为ms)来避免。

4. 统计得到的Minor GC晋升到旧生代的平均大小大于旧生代的剩余空间

这是一个较为复杂的触发情况,Hotspot为了避免由于新生代对象晋升到旧生代导致旧生代空间不足的现象,在进行Minor GC时,做了一个判断,如果之前统计所得到的Minor GC晋升到旧生代的平均大小大于旧生代的剩余空间,那么就直接触发Full GC。

例如程序第一次触发MinorGC后,有6MB的对象晋升到旧生代,那么当下一次Minor GC发生时,首先检查旧生代的剩余空间是否大于6MB,如果小于6MB,则执行Full GC。

当新生代采用PSGC时,方式稍有不同,PS GC是在Minor GC后也会检查,例如上面的例子中第一次Minor GC后,PS GC会检查此时旧生代的剩余空间是否大于6MB,如小于,则触发对旧生代的回收。

除了以上4种状况外,对于使用RMI来进行RPC或管理的Sun JDK应用而言,默认情况下会一小时执行一次Full GC。可通过在启动时通过- java-Dsun.rmi.dgc.client.gcInterval=3600000来设置Full GC执行的间隔时间或通过-XX:+ DisableExplicitGC来禁止RMI调用System.gc。

参考资料来源:百度百科-JAVA



首先,楼主需明白JVM 内置的通用垃圾回收原则,堆内存划分为 Eden、Survivor 和 Tenured/Old 空间,推荐去看《深入理解Java虚拟机》。GC一共分三种:MinorGC,
Major GC v和Full GC

Minor GC
从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC。这一定义既清晰又易于理解。但是,当发生Minor GC事件的时候,有一些有趣的地方需要注意到:
当 JVM 无法为一个新的对象分配空间时会触发 Minor GC,比如当 Eden 区满了。所以分配率越高,越频繁执行 Minor GC。
内存池被填满的时候,其中的内容全部会被复制,指针会从0开始跟踪空闲内存。Eden 和 Survivor 区进行了标记和复制操作,取代了经典的标记、扫描、压缩、清理操作。所以 Eden 和 Survivor 区不存在内存碎片。写指针总是停留在所使用内存池的顶部。
执行 Minor GC 操作时,不会影响到永久代。从永久代到年轻代的引用被当成 GC roots,从年轻代到永久代的引用在标记阶段被直接忽略掉。
质疑常规的认知,所有的 Minor GC 都会触发“全世界的暂停(stop-the-world)”,停止应用程序的线程。对于大部分应用程序,停顿导致的延迟都是可以忽略不计的。其中的真相就 是,大部分 Eden 区中的对象都能被认为是垃圾,永远也不会被复制到 Survivor 区或者老年代空间。如果正好相反,Eden 区大部分新生对象不符合 GC 条件,Minor GC 执行时暂停的时间将会长很多。
所以 Minor GC 的情况就相当清楚了——每次 Minor GC 会清理年轻代的内存。

Major GC vs Full GC
大家应该注意到,目前,这些术语无论是在 JVM 规范还是在垃圾收集研究论文中都没有正式的定义。但是我们一看就知道这些在我们已经知道的基础之上做出的定义是正确的,Minor GC 清理年轻带内存应该被设计得简单:
Major GC 是清理永久代。
Full GC 是清理整个堆空间—包括年轻代和永久代。
很不幸,实际上它还有点复杂且令人困惑。首先,许多 Major GC 是由 Minor GC 触发的,所以很多情况下将这两种 GC 分离是不太可能的。另一方面,许多现代垃圾收集机制会清理部分永久代空间,所以使用“cleaning”一词只是部分正确。

有时候系统会频繁的FullGC,这时候需要去服务器查一下原因,当然这又是另一个问题,楼主可以自己去了解下。

户户网菜鸟学习
联系邮箱
返回顶部
移动学习网