
【jvm 调优】
文章平均质量分 86
大阳彼岸
这个作者很懒,什么都没留下…
展开
-
Java内存分配机制
classLoader 类加载器通过加载class 文件的二进制字码文件在堆中形成java.lang.Class 对象对象2 虚拟机就会为其分配内存来存放对象自己的实例变量及其从父类继承过来的实例变量(即使这些从超类继承过来的实例变量有可能被隐藏也会被分配空间)。在为这些实例变量分配内存的同时,这些实例变量也会被赋予默认值(零值)3 进行类初始化(实例变量初始化、实例代码块初始化 以及...转载 2018-08-14 16:49:43 · 3106 阅读 · 0 评论 -
jvm 学习线路图(更新中)
java 虚拟机的完整结构 当我们在eclipse 中编写完代码的的时候,就会在bin 文件夹下面生成该类的class 字节码文件 1 new 实例 2 调用某个类的类静态方法 3 访问某个类变量或为某个类类变量或为变量赋值 4 使用反射的方式创建对象 5 初始化某个类的子类,子类的父类都会初始化 6 直接使用java.exe 命令运行某...原创 2018-09-14 22:45:49 · 812 阅读 · 0 评论 -
字节码(.class)文件的加载过程
Class文件装载经历的各个阶段: 在java应用程序开发中,只有被java虚拟机装载的Class类型才能在程序中使用。只要生成的字节码符合java虚拟机的指令集和文件格式,就可以在JVM上运行,这为java的跨平台性提供条件。 字节码文件的装载过程:加载 、 连接(包括三个步骤:验证 准备 解析) 、初始化,如图所示--------------------------...转载 2018-09-14 21:54:48 · 4262 阅读 · 0 评论 -
eclipse 的java 编译器和javac的区别
Eclipse已经实现了自己的编译器,命名为 Eclipse编译器for Java (ECJ)。它不同于javac,Sun JDK附带的编译器。一个显着的区别是,Eclipse编译器允许您运行实际上没有正确编译的代码。如果错误的代码块从未运行,您的程序将运行良好。另一个不同之处在于Eclipse编译器允许在Eclipse中进行增量构建IDE,也就是所有的代码一旦你完成输入就编译。Eclips...转载 2018-09-14 15:15:36 · 4051 阅读 · 0 评论 -
内存分配,内存泄漏解决
内存分配设置 整个堆大小=年轻代大小 + 年老代大小 + 持久代大小 堆 -Xmx3550m(设置堆最大的可用内存) 设置JVM最大可用内存为3550M。 -Xms3550m(设置堆最小的可用内存) 设置JVM促使内存为3550m。此值可以设置与-...原创 2018-09-24 17:20:29 · 370 阅读 · 0 评论 -
.class 文件的结构
采用二进制来写文件的两大优点就是降低了存储空间,提升了读写的性能。我们采用来打开二进制文件,为什么要采用二进制来存储,通常情况下,存储数据的格式有xml,json,txt 但是他们这种可读性很好但是占用的空间很大,占用的空间很大所以可读性很差, 所以经常采用二进制(0101001只有0和1 的方式)的读取方式,通常本来是几个G的文件的,改写成二进制的话,就变成了几百兆了,或者是几十...原创 2018-09-11 15:06:24 · 546 阅读 · 0 评论 -
classloader 加载类
Classloader 用到的的jvm 结构 类加载器的工作原理基于三个机制 1 委托 类加载器一共有三种 bootstrap classloader:引导类加载器,加载rt.jar中的类,主要加载是java 类库 sun.misc.Launcher$ExtClassLoader:扩展类加载器,...转载 2018-07-15 17:07:12 · 535 阅读 · 0 评论 -
什么时候进行java类的初始化
当java程序首次通过下面6中方式来使用某个类或接口时,系统就会初始化该类或接口。 (1)创建类的实例。为某个类创建实例的方式包括:使用new操作符来创建实例,通过反射来创建实例,通过反序列化的方式来创建实例。 (2)调用某个类的类方法(静态方法)。 (3)访问某个类变量或为某个类变量。或为该变量赋值 (4)使用反射方式来强制创建某个类或接口对应的java....转载 2018-08-07 13:24:53 · 2029 阅读 · 0 评论 -
java类的初始化顺序
java的类的加载顺序对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。我们也可以通过下面的测试代码来验证这一点:public class InitialOrderTest {// 静态变量public static String staticField = '静态变量';// 变量public...转载 2018-08-07 13:22:28 · 320 阅读 · 0 评论 -
堆栈分离,如何判断什么是垃圾
1 为什么说堆栈分离使垃圾分类成为可能可以作为GC roots 中的对象有虚拟机栈中引用的对象,方法区中类静态属性引用的对象,方法区中常量引用的对象,本地方法栈中native 引用的对象都是作为GC roots的,因为系统中除了栈以外,以栈或对象中的引用找到对象,又以这些对象找到其他对象,形成一个对象树,对象的引用以null 或者是基本类型结束,如果栈中有多个引用,就有多个对象树,这些树上的对...原创 2018-06-25 11:18:16 · 412 阅读 · 0 评论 -
jvm 性能调优
6、直接内存直接内存(Direct Memory)并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域,但是这部分内存也被频繁地使用,而且也可能导致OutOfMemoryError 异常出现,所以我们放到这里一起讲解。在JDK 1.4 中新加入了NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O 方式,它可以使...转载 2018-08-14 17:38:32 · 122 阅读 · 0 评论 -
垃圾收集
年轻代 年轻代大小选择 响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到达年老代的对象。 吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度。因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用。 ...原创 2018-08-14 16:52:04 · 393 阅读 · 0 评论 -
jvm虚拟机工具
jps jps 无参数:显示进程的ID 和 类的名称 jps 原理 java程序在启动以后,会在java.io.tmpdir指定的目录下,就是临时文件夹里,生成一个类似于hsperfdata_User的文件夹,这个文件夹里(在Linu...原创 2018-09-20 20:32:01 · 321 阅读 · 0 评论