【JVM系列】:(一)虚拟机内存结构

 1 package com.bjsxt.proxy.dymanic;
 2
 3 import java.lang.reflect.Proxy;
 4
 5 /**
 6  * 动态代理测试
 7  * @author  zht
 8  * @date 2017年9月26日 下午12:27:02
 9  * @version 1.0
10  * @since
11  * @return
12  */
13 public class Client {
14
15     public static void main(String[] args) throws Exception {
16
17         Iopreation io = new Operation1Impl();
18
19         Class<?>[] interfaces = io.getClass().getInterfaces();
20
21         Iopreation newProxyInstance = (Iopreation)Proxy.newProxyInstance(Iopreation.class.getClassLoader(), io.getClass().getInterfaces(), new LogInvocationHandler(io));
22
23         System.out.println(newProxyInstance.getClass().getName());
24
25         newProxyInstance.drive("奔驰");
26         newProxyInstance.sayHello();
27     }
28
29 }

Vi

 1 package com.bjsxt.proxy.dymanic;
 2
 3 import java.lang.reflect.Proxy;
 4
 5 /**
 6  * 动态代理测试
 7  * @author  zht
 8  * @date 2017年9月26日 下午12:27:02
 9  * @version 1.0
10  * @since
11  * @return
12  */
13 public class Client {
14
15     public static void main(String[] args) throws Exception {
16
17         Iopreation io = new Operation1Impl();
18
19         Class<?>[] interfaces = io.getClass().getInterfaces();
20
21         Iopreation newProxyInstance = (Iopreation)Proxy.newProxyInstance(Iopreation.class.getClassLoader(), io.getClass().getInterfaces(), new LogInvocationHandler(io));
22
23         System.out.println(newProxyInstance.getClass().getName());
24
25         newProxyInstance.drive("奔驰");
26         newProxyInstance.sayHello();
27     }
28
29 }

ew Code

 1 package com.bjsxt.proxy.dymanic;
 2
 3 import java.lang.reflect.Proxy;
 4
 5 /**
 6  * 动态代理测试
 7  * @author  zht
 8  * @date 2017年9月26日 下午12:27:02
 9  * @version 1.0
10  * @since
11  * @return
12  */
13 public class Client {
14
15     public static void main(String[] args) throws Exception {
16
17         Iopreation io = new Operation1Impl();
18
19         Class<?>[] interfaces = io.getClass().getInterfaces();
20
21         Iopreation newProxyInstance = (Iopreation)Proxy.newProxyInstance(Iopreation.class.getClassLoader(), io.getClass().getInterfaces(), new LogInvocationHandler(io));
22
23         System.out.println(newProxyInstance.getClass().getName());
24
25         newProxyInstance.drive("奔驰");
26         newProxyInstance.sayHello();
27     }
28
29 }
时间: 2024-10-09 15:38:49

【JVM系列】:(一)虚拟机内存结构的相关文章

JVM运行时的内存结构

我们都知道,JVM的垃圾收集机制能够帮开发者自动管理内存,了解JVM运行时的内存结构是理解垃圾收集机制的前提.本文主要简单介绍JVM运行时的内存结构. [JVM运行时内存中不同的数据区域] 一.PC寄存器 做过嵌入式开发或者底层编程的朋友应该都知道PC寄存器的作用,它就相当于在程序流中的游标,指示线程当前的运行位置.但是要注意,如果虚拟机执行的是本地native方法,则PC寄存器为undefined状态. 一个线程持有一个独立的PC寄存器. 二.java栈 每一个JVM线程都会拥有一个java栈

从一道面试题深入了解java虚拟机内存结构

记得刚大学毕业时,为了应付面试,疯狂的在网上刷JAVA的面试题,很多都靠死记硬背.其中有道面试题,给我的印象非常之深刻,有个大厂的面试官,顺着这道题目,一直往下问,问到java虚拟机的知识,最后把我给问住了. 我当时的表情是这样的: 后来我有机会面试别人了,也按照他的思路出面试题,很多已经工作了2年的程序员,结果也和我当年一样,都败在java虚拟机知识上. 我们先看面试题: String str1 = "hello Alunbar"; String str2 = new String(

JVM——java虚拟机内存结构简介

JAVA虚拟机内存结构示意图 各区域介绍 程序计数器 程序计数器,用来记录每一个线程正在执行的指令地址.每一个线程有一个线程计数器,因此该区域是"线程私有"的内存,生命周期与线程相同.如果线程执行的是native本地方法,则程序计数器为空. 虚拟机栈区 每当线程执行一个方法时,虚拟机就会在这个区域创建一个栈帧,用于存储局部变量.动态链接.方法出口等信息.该区域也是"线程私有"的内存. 本地方法栈 本地方法栈主要是用来执行Native方法服务的 Java堆 所有线程共

jvm比较详尽的内存结构

JVM内存结构 2012-09-17 15:27:59 分类: Java 本文转自:http://www.blogjava.net/nkjava/archive/2012/03/14/371831.html 1.1     JVM运行 ClassLoader->RUNNTIME DATA AREA->EXECUTION ENGINE->NATIVE INTERFACE->NATIVE LIBRARIES Class Loader:负责加载类到内存 RUNNTIME DATA ARE

JVM系列(一内存模型)

好久没有整理这方面的东西了.现在整理一下JVM相关的东西.这是第一篇,JVM内存模型. 进程&JVM 首先,何谓JVM?为什么要有JVM的存在? JVM就是java virtual machine的简称.当然了,除了java的VM以外还会有好多别的虚拟机.java的VM模型有好几个,其中最常见的应该是HotSpot VM. 假设jvm在一个32位的操作系统中运行.32位windows最大只支持4G内存,而进程只能最多2G内存:32位linux最大也只支持4G内存,但是进程最多可以有3G左右.画个

JVM笔记2-Java虚拟机内存管理简介

java虚拟机内存管理图如下图所示: 1.线程共享区,是所有的线程所共用的,线程共享区有一下几个组成: 1.方法区:运行时常量池,已经被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据 2.java堆:存储对象实例 2.线程独占区,是每一个线程都有自己独立的虚拟机栈,本地方法栈,程序计数器. 1.虚拟机栈:存储方法运行时所需的数据,成为栈帧. 2.本地方法栈:为JVM所调用到的native即本地方法服务. 3.程序计数器:记录当前线程所执行到的字节码的行号. 原文地址:https

JVM系列之六:内存溢出、内存泄漏 和 栈溢出

1. OOM && SOF OutOfMemoryError异常: 除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(OOM)异常的可能, 内存泄露:指程序中动态分配内存给一些临时对象,但是对象不会被GC所回收,它始终占用内存.即被分配的对象可达但已无用. 内存溢出:指程序运行过程中无法申请到足够的内存而导致的一种错误.内存溢出通常发生于OLD段或Perm段垃圾回收后,仍然无内存空间容纳新的Java对象的情况. 从定义上可以看出内存泄露是内存溢出的一

我的面试经之JVM(二)内存结构概述

内存结构概述 1.内存结构概述 2.类加载器与类的加载过程 3.类加载分类器 4.ClassLoader的使用 5.双亲委派机制 6.其他 这是一个可供参考的简图: 类加载器子系统Class Loader: 字节码文件——>类加载器子系统,包括:加载[引导类加载器.扩展类加载器.应用类(系统)加载器]——链接[验证.准备.解析]——初始化 运行时数据区:上图从右到左依次为: 本地方法栈 PC寄存器(线程单位拥有) 虚拟机栈 堆 方法区(只有Hotspot有) 左边:执行引擎,从左至右为: 解释器

Java虚拟机系列之Java内存结构简介

本文我们将讲解Java虚拟机中各个区域以及各个区域的作用. 一.程序计数器什么是程序计数器,有什么作用?程序技术器是一块比较小的内存区域,主要当做是线程中所执行的字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器的值来选取下一个执行的字节码命令,分支.循环.跳转等基础功能都是依赖这个程序计数器来完成. 有什么特点?Java虚拟机中的多线程是通过线程轮流切换分配处理器执行时间的方式来实现的,所以为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各条线程之间计数器互