-
内存模型-私有部分
代码演示:package com.imooc.java.reflect; public class ByteCodeSample { public static int add(int a,int b){ int c = 0; c = a+b; return c; } }
对class文件进行反编译
appledeMBP:com apple$ javac imooc/java/reflect/ByteCodeSample.java appledeMBP:com apple$ javap -verbose imooc/java/reflect/ByteCodeSample.class Classfile /Users/apple/Desktop/demo/SparkTest/src/main/java/com/imooc/java/reflect/ByteCodeSample.class Last modified 2019-4-9; size 293 bytes MD5 checksum e529fd08d9eec77927dd36bdf7040d12 Compiled from "ByteCodeSample.java" public class com.imooc.java.reflect.ByteCodeSample minor version: 0 major version: 52 flags: ACC_PUBLIC, ACC_SUPER Constant pool: #1 = Methodref #3.#12 // java/lang/Object."<init>":()V #2 = Class #13 // com/imooc/java/reflect/ByteCodeSample #3 = Class #14 // java/lang/Object #4 = Utf8 <init> #5 = Utf8 ()V #6 = Utf8 Code #7 = Utf8 LineNumberTable #8 = Utf8 add #9 = Utf8 (II)I #10 = Utf8 SourceFile #11 = Utf8 ByteCodeSample.java #12 = NameAndType #4:#5 // "<init>":()V #13 = Utf8 com/imooc/java/reflect/ByteCodeSample #14 = Utf8 java/lang/Object { public com.imooc.java.reflect.ByteCodeSample(); descriptor: ()V flags: ACC_PUBLIC Code: stack=1, locals=1, args_size=1 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return LineNumberTable: line 3: 0 public static int add(int, int); descriptor: (II)I flags: ACC_PUBLIC, ACC_STATIC Code: stack=2, locals=3, args_size=2 0: iconst_0 1: istore_2 2: iload_0 3: iload_1 4: iadd 5: istore_2 6: iload_2 7: ireturn LineNumberTable: line 5: 0 line 6: 2 line 7: 6 } SourceFile: "ByteCodeSample.java"
-
内存模型-公有部分
jdk1.8将永久代(PermGen)也就是方法区换成了元空间(MetaSpace)
区别是:元空间使用本地内存,而永久代使用的是jvm的内存
优势:1、字符串常量池存在永久代中,容易出现性能问题和内存溢出
2、类和方法的信息大小难确定,给永久代的大小指定带来困难
3、永久代会为GC带来不必要的复杂性 -
常见面试题
1、JVM三大性能调优参数 -Xms -Xmx -Xss的含义