随笔分类 -  java虚拟机

ClassLoader 理解
摘要:ClassLoader 做什么的?顾名思义,它是用来加载 Class 的。它负责将 Class 的字节码形式转换成内存形式的 Class 对象。字节码可以来自于磁盘文件 *.class,也可以是 jar 包里的 *.class,也可以来自远程服务器提供的字节流,字节码的本质就是一个字节数组 []by 阅读全文

posted @ 2021-02-24 14:45 signheart 阅读(156) 评论(0) 推荐(0) 编辑

JVM两种运行模式Server与Client
摘要:JVM有两种运行模式Server与Client。两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而Cli 阅读全文

posted @ 2021-02-24 14:44 signheart 阅读(998) 评论(0) 推荐(0) 编辑

java虚拟机12:类加载器
摘要:类与类加载器 虚拟机设计团队把类加载阶段张的"通过一个类的全限定名来获取此类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为"类加载器"。类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限定于类加载 阅读全文

posted @ 2021-02-24 14:43 signheart 阅读(70) 评论(0) 推荐(0) 编辑

java Class File 文件结构
摘要:学习Java的朋友应该都知道Java从刚开始的时候就打着平台无关性的旗号,说“一次编写,到处运行”,其实说到无关性,Java平台还有另外一个无关性那就是语言无关性,要实现语言无关性,那么Java体系中的class的文件结构或者说是字节码就显得相当重要了,其实Java从刚开始的时候就有两套规范,一个是 阅读全文

posted @ 2021-02-24 14:43 signheart 阅读(266) 评论(0) 推荐(0) 编辑

java虚拟机11:运行期优化
摘要:编译对象与触发条件 之前讲过,Sun使用的虚拟机之所以被叫做"HotSpot",就是因为运行过程中会检测热点代码,那么运行过程中,会被即时编译器编译的"热点代码"有两类,即: 被多次调用的方法被多次执行的循环体 前者很好理解,一个方法被调用得多了,方法体内代码执行的次数自然就多,他成为"热点代码"也 阅读全文

posted @ 2021-02-24 14:42 signheart 阅读(97) 评论(0) 推荐(0) 编辑

java虚拟机11:Java类加载机制
摘要:前言 我们知道我们写的程序经过编译后成为了.class文件,.class文件中描述了类的各种信息,最终都需要加载到虚拟机之后才能运行和使用。而虚拟机如何加载这些.class文件?.class文件的信息进入到虚拟机后会发生什么变化?这些都是本文要讲的内容,文章将会讲解加载类加载的每个阶段Java虚拟机 阅读全文

posted @ 2021-02-24 14:42 signheart 阅读(219) 评论(0) 推荐(0) 编辑

java虚拟机 10:内存分配原则
摘要:前言 对象的内存分配,往大的方向上讲,就是在堆上分配,少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的,其细节决定于当前使用的是哪种垃圾收集器组合,当然还有虚拟机中与内存相关的参数。垃圾收集器组合一般就是Serial+Serial Old和Parallel+Serial Old, 阅读全文

posted @ 2021-02-24 14:41 signheart 阅读(107) 评论(0) 推荐(0) 编辑

java虚拟机9:Java的内存模型
摘要:什么是Java内存模型 Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在此之前,主流程序语言(如C/C++等)直接使用物理硬件和操作系统的内存模型,因此, 阅读全文

posted @ 2021-02-24 14:40 signheart 阅读(86) 评论(0) 推荐(0) 编辑

java虚拟机8:内存溢出和内存泄露、并行和并发、Minor GC和Full GC、Client模式和Server模式的区别
摘要:内存溢出和内存泄露的区别 1、内存溢出 内存溢出指的是程序在申请内存的时候,没有足够大的空间可以分配了。 2、内存泄露 内存泄露指的是程序在申请内存之后,没有办法释放掉已经申请到内存,它始终占用着内存,即被分配的对象可达但无用。内存泄露一般都是因为内存中有一块很大的对象,但是无法释放。 从定义上可以 阅读全文

posted @ 2021-02-24 14:39 signheart 阅读(174) 评论(0) 推荐(0) 编辑

java虚拟机7:垃圾收集器 基于回收算法理论的实现
摘要:垃圾收集器 垃圾收集器就是上面讲的理论知识的具体实现了。不同虚拟机所提供的垃圾收集器可能会有很大差别,我们使用的是HotSpot,HotSpot这个虚拟机所包含的所有收集器如图: 上图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,那说明它们可以搭配使用。虚拟机所处的区域说明它是属于新 阅读全文

posted @ 2021-02-24 14:38 signheart 阅读(84) 评论(0) 推荐(0) 编辑

java虚拟机5:垃圾回收算法
摘要:引用计数(Reference Counting):比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。标记-清除(Mark-Sweep):这是最基础的算法,标记-清除算法就如同它的名字样, 阅读全文

posted @ 2021-02-24 14:37 signheart 阅读(159) 评论(0) 推荐(0) 编辑

java虚拟机4:jvm GC机制回收 判断对象生死 及 方法区永久代回收条件
摘要:heap堆中存放着几乎所有的对象实例,垃圾收集器在堆堆进行回收前,首先要确定这些对象哪些还“活着”,哪些已经“死去”。方法有如下两种: (1)引用计数法 算法思想:为对象添加一个引用计数器,每当有一个地方引用该对象时,则该引用计数器值加1,;当引用失效时,则该引用计数器值减1;最后,计数器为0的对象 阅读全文

posted @ 2021-02-24 14:35 signheart 阅读(171) 评论(0) 推荐(0) 编辑

java虚拟机3:jvm OutOfMemoryError
摘要:在JVM中内存一共有3种:Heap(堆内存),Non-Heap(非堆内存) 和Native(本地内存)。 堆内存是运行时分配所有类实例和数组的一块内存区域。非堆内存包含方法区和JVM内部处理或优化所需的内存,存放有类结构(如运行时常量池、字段及方法结构,以及方法和构造函数代码)。本地内存是由操作系统 阅读全文

posted @ 2021-02-24 14:35 signheart 阅读(79) 评论(0) 推荐(0) 编辑

java虚拟机6:hotspot 的算法实现
摘要:1.枚举根节点 2.安全点 3.安全区域 阅读全文

posted @ 2021-02-24 14:35 signheart 阅读(111) 评论(0) 推荐(0) 编辑

java虚拟机1:JVM内存结构
摘要:几个计算机的概念为以后写文章考虑,也为巩固自己的知识和一些基本概念,这里要理清楚几个计算机中的概念。1、计算机存储单位从小到大依次为位Bit、字节Byte、千字节KB、兆M、千兆GB、TB,相邻单位之间都是1024倍,1024为2的10次方,即1Byte = 8bit,1K = 1024Byte,1 阅读全文

posted @ 2021-02-24 14:35 signheart 阅读(100) 评论(0) 推荐(0) 编辑

java虚拟机2:hotspot 对象探究
摘要:对象的创建 Java是一门面向对象的编程语言,Java程序运行过程中每时每刻都有对象被创建出来。在语言层面上,创建对象通常(例外:克隆、反序列化)仅仅是一个new关键字而已,而在虚拟机中,对象(本文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢? 虚拟机遇到 阅读全文

posted @ 2021-02-24 14:35 signheart 阅读(148) 评论(1) 推荐(0) 编辑

JVM调优总结 -Xms -Xmx -Xmn -Xss
摘要:堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统 下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0 阅读全文

posted @ 2021-02-24 14:34 signheart 阅读(333) 评论(0) 推荐(0) 编辑

导航

点击右上角即可分享
微信分享提示