`
walklen
  • 浏览: 24874 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

说说jvm

 
阅读更多

1.一个jvm的天职就是运行一个java程序,当这个java程序关闭退出,这个jvm也随之消亡。一个jvm从一个java的main方法开始,其内部分两种线程,守护线程和非守护线程,守护线程一般来讲是jvm的后台线程,比如gc线程就是一个守护线程,程序的入口main方法就是java程序的第一个飞守护线程,当所有的非守护线程都结束,jvm的生命周期也就结束了。

2.每个对象都还有一个对象锁,用于协调多个线程访问同一对象(资源)的同步。

2.每个对象都有一个等待集合(wait set),等待集合是为多个线程完成某一目标而协调工作的,当一个线程调用了某个对象的wait方法,该线程就被阻塞,并把它放到该对象的等待集合中,知道另一线程在同一对象中调用notify或者notifuAll进行唤醒。

3:数组,在java中,数组是真正的对象,它的直径超类是Object,每一个具有相同维度和类型的数组都是同一个类的实例,数组类的组成有两部分,每一维用一个“[”表示,用字符或者字符串表示元素类型,如int类型一维数组的类名为:"[i";String的二维数组为“[[java/lang/String”.

4.栈帧,包括:

  (1)局部变量区,参数、局部变量的基本类型和引用

  (2)操作数栈,执行引擎操作过程的中间变量

  (3)帧数据区,存储常量池解析,正常返回或者异常派发等。

5.<clinit>方法是java编译器变量初时化语句静态初始话语句的代码都放到class的<clinit>方法中,jvm在加载初始化时调用该方法,如果有父类,就先调用父class的<clinit>,接口直径调用本身的<linit>.

6.实例化一个对象有四种方法1.new 2.Class或者Constructor的newInstance()反射实例化,3.clone  (),4.ObjectInputStream.getObject()反序列化。

分享到:
评论
3 楼 walklen 2012-07-13  
hougate 写道
在开发,应该这样用,如果一个线程的任务不太重要或线程的生命周期一定与主线程(main入口的线程)保持一致时,我们就可以把这个线程设置成守护线程,把它托管给虚拟机,这样在系统中就不需要管理这个线程的生命了;
不知道这样理解是否有误,请楼主详解!



线程的类别有继承的功能,非守护线程中建立的新线程会就是非守护线程,我们的线程一般都是直接或者间接在main线程建立的新线程,所以默认都是非守护线程。如果一个线程不太重要,而且生命周期很长,甚至有可能比任何其它的用户线程都长,这种情况下是可以用到守护线程的作用。
2 楼 hougate 2012-07-13  
在开发,应该这样用,如果一个线程的任务不太重要或线程的生命周期一定与主线程(main入口的线程)保持一致时,我们就可以把这个线程设置成守护线程,把它托管给虚拟机,这样在系统中就不需要管理这个线程的生命了;
不知道这样理解是否有误,请楼主详解!
1 楼 hougate 2012-07-13  


不错不错,
我对于守护线程和非守护线程,理解比较简单,其实我觉得应该叫守护线程和用户线程更加容易理解,而且守护线程的存在本质上就是为用户线程服务的(在虚拟机运行时应该有两个线程容器(ThreadList),一个是的虚拟机守护线程,一个是虚拟机运行的用户线程,所以在创建前必需先指定线程的类型,因为他会在创建时确定存放的容器),
在Main方法结束时,虚拟机会确定用户线程容器里是否存在用户线程,如果存在,就等待所有线程的结束,才结束虚拟机的生命周期;

说白了:守护线程是由虚拟机来决定是否销毁,用户线程,虚拟机没有权力销毁;

相关推荐

    java核心面试技术点

    1说说JVM原理?内存泄露与溢出区别,何时产生内存泄露? 编译源代码为本地机器码执行。 内存泄露是一部分内存无法回收。溢出是说内存不够用了。泄露可能在将来会导致溢出 当对象在程序中不会被使用,但却有其他...

    java核心面试

    1说说JVM原理?内存泄露与溢出区别,何时产生内存泄露? 编译源代码为本地机器码执行。 内存泄露是一部分内存无法回收。溢出是说内存不够用了。泄露可能在将来会导致溢出 当对象在程序中不会被使用,但却有其他...

    阿里面试题 JVM-开源框架.docx

    JVM知识 什么情况下会发生栈内存溢出。 JVM的内存结构,Eden和Survivor比例。 JVM内存为什么要分成新生代,老年代,持久代。...JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代,说说你知道的几种主要的JVM参数。

    jdk1.8的jvm内存模型——实习生必须了解的

    因为马上要准备实习面试了,而jvm又是面试常考的,我现在来总结一下jvm相关知识,而对于不同版本的jdk,又有许多不同的地方,为此我看了许多博客发现越看越晕,于是我只搜索了最近一年发表的jvm相关博客,并进行了...

    JVM解毒——类加载子系统

    看你简历写得熟悉JVM,那你说说类的加载过程吧? 我们可以自定义一个String类来使用吗? 什么是类加载器,类加载器有哪些? 多线程的情况下,类的加载为什么不会出现重复加载的情况? 什么是双亲委派机制?它有啥...

    关于Flume的优化和高可用

    2)JVM heap(堆内存)设置4G或更高二、channel优化Flume如何保证数据安全(高可用)事务机制Flume解决数据重复负载均衡知道 Flume 的 Channel 是啥吗介绍一下 Memory Channel说说 File Channel说说 Kafka Channel...

    JavaSE基础面试题.docx

    19.说说HashMap如何处理碰撞的,或者说说它的扩容? 20.jdk7/8中对HashMap做了哪些改变? 21.负载因子为什么会影响HashMap性能 22.为什么HashMap中initailCapacity要设置成2的n次幂 23.ConcurrentHashMap分段式加锁...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【*JVM】查看jvm虚拟机里面堆、线程的信息,你用过什么命令? 59 【JVM】垃圾回收算法有哪些? 59 引用计数法(Reference Counting Collector) 59 tracing算法(Tracing Collector) 61 compacting算法(Compacting ...

    java面试笔试资料包括JAVA基础核心知识点深度学习Spring面试题等资料合集.zip

    Java面试高级篇—说说TCP,UDP和socket,Http之间联系和区别.doc MySQL千万级的大表要怎么优化(读写分离、水平拆分、垂直拆分).doc redis缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级.doc RPC (Remote ...

    Java面试-讲一讲什么是Java内存模型

    讲一讲什么是Java内存模型 Java内存模型虽说是一个老生常谈的问题 ,也是大厂面试中绕不过的,甚至初级面试也会问到。但是真正要理解起来,还是相当困难,主要这个...着重说一说可见性,说一说JVM内存的抽象、hanpens

    eclipse 内存溢出解决办法

    说说为什么会内存益出:这一部分 用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的 Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行...

    在PyCharm中三步完成PyPy解释器的配置的方法

    介绍方法之前,我们先说说Python的解释器,由于Python是动态编译的语言,和C/C++、Java或者Kotlin等静态语言不同,它是在运行时一句一句代码地边编译边执行的,而Java是提前将高级语言编译成了JVM字节码,运行时直接...

    【后端】 java基础(5.8)java高级基础之线程——synchronized关键字

    我们的java是运行在jvm虚拟机下的程序,我们每多启动一个jvm就是多了启动了一个进程。至于线程,就是每个进程下多开一个和现有的的任务同时执行的任务。 我们一个程序至少包含一个进程,一个进程至少包含一个线程 ...

    Java架构师之路系列教程

    3.高级篇-单点登录,Groovy视频,性能优化,Maven,Mongodb,Redis,Spring Security,Spring 源码,JVM,微信,银行接口等 4.架构篇-Linux视频,Nginx视频,京东海量订单处理视频,大型电商分布式实践,架构实战等 ...

    JDKSourceCode1.8:Jdk1.8源码解析

    专注于共享技术干货,包括Java基础,Java并发,JVM,Nginx,Zookeeper,微服务,消息代码,源码解析,数据库,设计模式,面经等,助您编程之路少走弯路。 有人说说得很好,一个人学习可以走得很快,但一群人学习可以...

    Java基础面试题(总结最全面的面试题!!!)

    原理是什么==、hashcode和equals==equals()hashcode为什么要有hashcodehashcode和equals的相关规定JVM JDK 和 JRE 是什么JVMJDK和JREJava和C++的区别?基本类型字符型常量和字符串常量的区别?自动装箱与拆箱说说&和&&...

    【推荐】超全的移动安全自学资料精编合集(43份).zip

    Android安全开发基础: JVM Dalvik ART虚拟机 Android安全开发基础: Java本地接口(JNI) Android安全开发基础: Android系统的启动过程分析 Android安全开发基础: 图形界面(UI)和碎片(Fragment)(上) Android...

    java面试题

    76.6. 如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置 87 76.7. 如何查看在weblogic中已经发布的EJB? 87 76.8. 说说在weblogic中开发消息Bean时的persistent与non-persisten的差别 87...

    GitHub 热门Java面试题

    面试题包括:基础、并发锁、JVM、设计模式、数据结构、反射/IO、面经、Spring、Spring Boot、数据库、Redis、消息队列、分布式、Zookeeper、Dubbo、Spring Cloud、Mybatis、Maven、大厂真实面经、源码分析

Global site tag (gtag.js) - Google Analytics