
Java底层
Linda_Lindaaaa
这个作者很懒,什么都没留下…
展开
-
Java虚拟机类加载过程学习
类的加载过程包括:加载-->验证-->准备-->解析-->初始化。1、加载 加载时,虚拟机要做的三件事:(1)通过一个类的全限定名来获取定义此类的二进制字节流。(2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。(3)在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据访问入口。2、验证目...原创 2019-03-12 21:47:26 · 156 阅读 · 0 评论 -
类加载器学习
类加载器:类加载阶段中,实现“通过一个类的全限定名来获取描述此类的二进制字节流”的代码模块称为“类加载器”。1、类加载器分类:从Java虚拟机的角度,只存在两种不同的类加载器:启动类加载器(Bootstrap ClassLoader)、所有其他类加载器。启动类加载器是C++语言实现的,而其他类加载器是Java语言实现,全部都继承自抽象类:java.lang.ClassLoader。...原创 2019-04-03 11:21:21 · 260 阅读 · 0 评论 -
虚拟机性能监控与故障处理工具学习
1、JDK的命令行工具(1)jps:虚拟机进程状况工具,显示指定系统内所有的HotSpot虚拟机进程。并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID。(2)jstat:虚拟机统计信息监控工具,用于监视虚拟机各种运行状态。可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。(3)jinfo:Java配置信息工具,实时查看和调整虚拟机各项参数(4)j...原创 2019-04-02 21:44:25 · 206 阅读 · 0 评论 -
JVM内存分配与回收策略
对象的内存分配,就是在堆上分配,对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也可能直接分配在老年代中,取决于使用的垃圾收集器和JVM中与内存相关参数的设置。1、对象优先在Eden区分配大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间进行分配时,虚拟机将发起一次Monitor GC。收集器日志参数:-XX:...原创 2019-04-02 20:55:20 · 405 阅读 · 0 评论 -
应用程序访问文件的几种方式
1、标准访问文件方式当应用程序调用read()接口时,操作系统检查在内核的高速缓存中有没有需要的数据,有就从缓存中返回,没有就从磁盘读取,并缓存到操作系统的缓存中。应用程序调用write()接口将数据从用户地址空间复制到内核地址空间的缓存中。什么时候写到磁盘由操作系统决定。2、直接I/O的方式应用程序直接访问磁盘数据,不经过操作系统的内核数据缓冲区。3、同步访问文件的方式数...原创 2019-04-05 17:10:57 · 1909 阅读 · 0 评论 -
垃圾收集算法及垃圾收集器学习
垃圾回收算法1、标记-清除算法算法包含标记和清除两个阶段:首先,标记出所有需要回收的对象,在标记完成后统一回收被标记的对象。缺点:效率低,标记和清除两个效率都不高。空间问题,产生大量不连续的内存碎片。2、复制算法将可用内存按容量分为大小相等的两块,每次只用其中一块,当这块内存用完了,就将存活的对象复制到另一块内存上,把使用过的内存空间一次性清理掉。商业虚拟机用该算法回收新生...原创 2019-03-29 22:18:43 · 170 阅读 · 0 评论 -
JVM学习之如何判断对象是否存活
1、引用计数法给对象添加一个引用计数器,每当有一个地方引用它时,计数器就加1,引用失效时,计数器就减1,任何时刻计数器为0的对象时不可能再被使用的。优点:实现简单,判定效率高。缺点:无法解决对象之间相互循环引用的问题。2、可达性分析法通过一系列的称为“GC Roots”的对象作为起始点,从这些节点向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链时...原创 2019-03-29 21:21:04 · 272 阅读 · 0 评论 -
Java对象的创建过程
对象的创建过程:类加载检查-->分配内存-->初始化零值-->设置对象头-->执行init方法1、类加载检查:虚拟机遇到一条new指令时,先检查这个指令的参数能否在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已被ji加载、解析和初始化过。如果没有,则先进行类的加载过程。2、分配内存:有两种方式指针碰撞:假设Java堆中的内存是规整的,用过的...原创 2019-03-21 21:39:23 · 4988 阅读 · 0 评论 -
JVM内存模型学习
JVM运行时数据区1、程序计数器一块较小的内存,当前线程所执行的字节码的行号指示器。每个线程都有一个独立的程序计数器,便于程序切换后恢复到正确的执行位置。属于线程私有的。唯一一个规定没有OOM的区域。2、Java虚拟机栈线程私有,生命周期与线程相同。描述的Java方法执行的内存模型,每个方法在执行的时候都会创建一个zh栈帧用于存储局部变量表、操作数栈、动态链表、方法出口等信息。每个...原创 2019-03-12 22:45:46 · 171 阅读 · 0 评论 -
Java内存模型学习
Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中读取变量的底层细节。Java内存模型规定了所有的变量都存储在主内存,每条线程还有自己的工作内存,保存了被该线程到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,不同的线程之间无法直接访问对方工作内存中的变量,线程间变量值得传递均需要主内存来完成。主内存主要对应与Java堆中的对象...原创 2019-04-03 18:02:17 · 213 阅读 · 0 评论