java虚拟机
张超帅
哈哈哈哈哈哈
展开
-
Java内存管理
请描述java的内存管理原理: Java的内存管理就是对象的分配和释放 在Java中,内存的分配是由程序完成的,而内存的释放是由垃圾收集器(Garbage Collection,GC)完成的 请描述java的内存分区运行时数据区域 Java虚拟机在执行Java的过程中会把管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,而有原创 2017-08-22 23:16:58 · 241 阅读 · 0 评论 -
类的生命周期
类的生命周期包括7个阶段 其中验证,准备,解析3个部分称为连接。 类的加载过程为:加载,验证,准备,解析,初始化。类加载的过程: 加载:查找并加载类的二进制文件。 验证:处于安全考虑,为了确保class文件的字节流包含的信息符合当前虚拟机的要求。 准备:分配内存,仅仅为类变量(static修饰的)分配并设初始值为0 解析:常亮池的符号引用替换为直接引用。 初始化:赋值,初始化遍历。原创 2017-10-04 13:53:37 · 164 阅读 · 0 评论 -
内存泄漏memory leak和内存溢出OOM
内存泄漏为什么会产生内存泄漏?当一个对象已经不需要再使用本该被回收时,另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏。简单的说,内存泄露就是你申请的内存没释放,导致这片内存不能再被申请。内存泄漏对程序的影响? 内存泄漏是造成应用程序OOM的主要原因之一. 内存泄露堆积后果很严重,无论多少内存,迟早会被占光。memor原创 2017-10-02 14:50:36 · 2529 阅读 · 0 评论 -
Java内存分配策略,Java运行时内存分配
Java 内存分配策略Java 程序运行时的内存分配策略有三种,分别是静态分配,栈式分配,和堆式分配,对应的,三种存储策略使用的内存空间主要分别是静态存储区(也称方法区)、栈区和堆区。静态存储区(方法区):主要存放静态数据、全局 static 数据和常量。这块内存在程序编译时就已经分配好,并且在程序整个运行期间都存在。栈区 :当方法被执行时,方法体内的局部变量(其中包括基础数据类型、对象的引用)都在原创 2017-10-04 09:44:14 · 977 阅读 · 0 评论 -
Java代码的内存分配和存储区域
下列Java代码中的变量a、b、c分别在内存的__存储区存放。class A { private String a = “aa”; public boolean methodB() { String b = “bb”; final String c = “cc”; }}a是类中的成员变量,存放在堆区 b、c都是方法中的局部变量,存放在栈区堆原创 2017-09-05 08:13:29 · 897 阅读 · 0 评论 -
java内存模型JMM
Java内存模型中规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存(可以与前面将的处理器的高速缓存类比),线程的工作内存中保存了该线程使用到的变量到主内存副本拷贝,线程对变量的所有操作(读取、赋值)都必须在工作内存中进行,而不能直接读写主内存中的变量。不同线程之间无法直接访问对方工作内存中的变量, 线程间变量值的传递均需要在主内存来完成。 线程、主内存和工作内存的交互关系如下图所示原创 2017-10-01 11:16:13 · 150 阅读 · 0 评论 -
类加载机制
介绍了类的加载时机和类的加载过程class SingleTon { private static SingleTon singleTon = new SingleTon(); public static int count1; public static int count2 = 0; private SingleTon() { co原创 2017-08-25 11:43:43 · 219 阅读 · 0 评论 -
Java Integer和String内存存储
void foo(){ Integer i1 = 2; Integer i2 = 2; Integer i3 = new Integer(2); System.out.println("i1 = i2? " + (i1 == i2)); //true System.out.println("i1 = i3? " + (i1 == i3)); //fals原创 2017-09-08 10:01:04 · 507 阅读 · 0 评论 -
虚拟机栈与本地方法栈
栈区: 栈中分配的是基本类型和自定义对象的引用。每个线程包含一个栈区,栈中只保存基础数据类型和自定义对象的引用(不是对象),对象都存放在堆区中 每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。 栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。原创 2017-09-02 21:02:20 · 4784 阅读 · 0 评论 -
JVM内存管理
JVM是按照运行时数据(Runtime Data)的存储结构来划分内存结构的。在Java虚拟机规范中将Java运行时数据划分为6种。内存结构:程序技术器,Java栈,堆,方法区,本地方法区。运行时常量池。 程序计数器: 当前线程所执行的字节码的行号指示器。用于保存当前正常执行的程序的内存地址。这很好理解,它就像一个记事员一样记录下哪个线程当前执行到哪条指令了。 JVM规范只定义了Java方法需原创 2017-08-30 23:41:18 · 190 阅读 · 0 评论 -
JVM计算题
对于JVM内存配置参数:-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3,其最小内存值和Survivor区总大小分别是()答案:10240m,2048m-Xmx:最大堆大小 -Xms:初始堆大小 -Xmn:年轻代大小 -XXSurvivorRatio:年轻代中Eden区与Survivor区的大小比值 年轻代5120m, Eden:Su原创 2017-09-24 19:56:30 · 316 阅读 · 0 评论 -
垃圾回收GC
GC 是什么?为什么要有 GC? 答:GC 是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java 提供的 GC 功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java 语言没有提供释放已分配内存的显示操作方法。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:S原创 2017-08-24 22:03:36 · 340 阅读 · 0 评论 -
垃圾收集器比较和收集算法
Java有四种类型的垃圾回收器串行垃圾回收器(Serial Garbage Collector) 并行垃圾回收器(Parallel Garbage Collector) 并发标记扫描垃圾回收器(CMS Garbage Collector) G1垃圾回收器(G1 Garbage Collector)串行回收器(Serial Collector) 单线程执行回收操作,回收期间暂停原创 2017-09-07 10:56:02 · 345 阅读 · 0 评论 -
jvm方法区存储了什么东西?
总的来说: 类的方法代码,常量,静态变量,方法名,访问权限,返回值等等都是在方法区的常量池 jvm为每个已加载的类型都维护一个常量池。常量池就是这个类型用到的常量的一个有序集合,包括实际的常量(string, integer, 和floating point常量)和对类型,域和方法的符号引用。池中的数据项象数组项一样,是通过索引访问的。 因为常量池存储了一个类型所使用到的所有类型,域和原创 2017-09-02 20:44:29 · 7970 阅读 · 0 评论 -
新生代和老年代区别
所谓的新生代和老年代是针对于分代收集算法来定义的,新生代又分为Eden和Survivor两个区。加上老年代就这三个区。数据会首先分配到Eden区 当中(当然也有特殊情况,如果是大对象那么会直接放入到老年代(大对象是指需要大量连续内存空间的java对象)。),当Eden没有足够空间的时候就会 触发jvm发起一次Minor GC。如果对象经过一次Minor GC还存活,并且又能被Survivor空间接受转载 2017-10-06 11:02:35 · 2420 阅读 · 0 评论