
正文
虚拟机栈分为几个部分,虚拟机栈是线程私有的嘛
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Java虚拟机几个点
1、堆:存放对象实例。方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
2、Java虚拟机由五个部分组成:一组指令集、一组寄存器、一个栈、一个无用单元收集堆(Garbage-collected-heap)、一个方法区域。
3、Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码,就可以在多种平台上不加修改地运行。
相关问答
Q1: Java垃圾回收:GC在什么时候对什么做了什么
在什么时候GC 首先,GC堆内存分为三部分:Young Generation,Old Generation,Permanent Generation。
这个时候,from和to会交换他们的角色,也就是新的to就是上次GC前的fromMinor GC:从年轻代回收内存。当jvm无法为一个新的对象分配空间时会触发Minor GC,比如当Eden区满了。
gc是Garbage Collection的缩写,是垃圾回收机制的意思。gc即垃圾回收机制,用于java堆的内存管理,在JVM中程序计数器,为了避免影响性能,java虚拟机会在程序运行过程中不断的进行自动的垃圾回收。
Java GC会定期扫描内存中的对象,识别那些已经不再使用的对象,然后释放它们所占用的空间,这个过程称为内存回收。在Java中,垃圾回收机制的实现是由JVM虚拟机来完成的。
在Java中,堆内存被划分为年轻代(Young Generation)和老年代(Old Generation)。年轻代又被细分为Eden区、Survivor 0区和Survivor 1区。
Q2: 请问利用Java反射实现一个类中的接口是如何实现的呢?
1、获取当前线程的ClassLoader,通过ClassLoader获取当前工作目录,对目录下的文件进行遍历扫描。过滤出以.class为后缀的类文件,并加载类到list中,对list中所有类进行校验,判断是否为指定接口的实现类,并排除自身。
2、在源码环境下进行访问,即将我们的工程放到源码下进行编译,这样是可以访问的;通过java的反射机制 场景描述 这里讲述的是在eclipse下直接通过反射机制来访问系统隐藏api。
3、接下来,需要定义一个类来实现接口,因为不知道JAVA的内置矩形类是什么名,所以为了安全,将该类定义为RRect,这可以认为是一种安全策略。关于implements,可以参考其他资料。
4、使用这些类的时候必须要遵循三个步骤:第一步是获得你想操作的类的 java.lang.Class 对象。在运行中的 Java 程序中,用 java.lang.Class 类来描述类和接口等。
Q3: 方法中定义的局部变量是否线程安全?
1、多线程访问单利的话,单利模式的全局变量就会被各个线程影响。因为线程都有各自的栈堆,所以方法中的是安全的。
2、局部变量:线程安全。每个线程执行时将会把局部变量放在各自栈帧的工作内存中,线程间不共享,故不存在线程安全问题。
3、final修饰的变量是线程安全的,因为final变量在初始化之后就不能再被修改,不存在并发访问问题。final变量在多线程环境下可以被同时访问,不需要额外的线程同步机制。
4、如果i是局部变量(在方法里定义的),那么是线程安全的。因为局部变量是线程私有的,别的线程访问不到,其实也可以说没有线程安不安全之说,因为别的线程对他造不成影响。
Q4: JVM基础和内存区域剖析
我们在编写程序时,经常会遇到OOM(out of Memory)以及内存泄漏等问题。为了避免出现这些问题,我们首先必须对JVM的内存划分有个具体的认识。JVM将内存主要划分为:方法区、虚拟机栈、本地方法栈、堆、程序计数器。
一个jvm实例,只存在一个堆内存,堆内存的大小是可以调节的。类加载器读取了类文件之后,需要把类,方法,常量放到堆内存中,保存所有的引用类型的真实信息,以方便执行器执行。堆内存分为三部分。
一:堆内存和非堆内存定义 Java虚拟机具有一个堆(Heap),堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是Java虚拟机启动时创建的。在JVM中堆之外的内u你成为非堆内存(Non-heap memory)。
一,jvm内存区域 1, 程序计数器 一块很小的内存空间,作用是当前线程所执行的字节码的行号指示器。2, java栈 与程序计数器一样,java栈(虚拟机栈)也是线程私有的,其生命周期与线程相同。
关于虚拟机栈分为几个部分和虚拟机栈是线程私有的嘛的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。








