• 幸福来敲门
    2019-11-22
    老师,内存溢出和内存泄漏有什么区别,以java为例??

    作者回复: 内存溢出是说程序需要申请的内存超过了JVM当前可以分配的最大内存,溢出。

    内存泄漏是说期望被回收的内存对象没有被回收,泄漏。

    内存泄漏持续发生,很可能引起内存溢出。

     1
     20
  • 乘坐Tornado的线程魔...
    2019-11-22
    存活对象从From区复制到To区之后,在交换名称之前,是不是要把From区的那些不存活对象全部回收?(保证交换名字之后,To区永远是空白的)

    作者回复: 内存空间只需要标记是空闲就可以,交换以后To区就已经是空白的了。

    
     4
  • [耶]友超
    2019-11-22
    老师,好强大的内功
     1
     3
  • KL3
    2019-11-22
    请问老师,关于类加载,对象方法和类方法都是放在方法区吗?

    作者回复: 可执行的代码都在方法区。

    对象是类的实例,实例变量在堆中,同一个类的所有对象实例的方法只有一份,在方法区。

     3
     3
  • 老男孩
    2019-11-22
    虽然之前学习过相关的知识,老师讲的不敢说是最全面的,但是非常易于理解,我对jvm相关知识又有了新的认识!受益匪浅!
    1)如果能把类加载机制说的更详细一点就更好了。因为以前我遇到过一个问题,就是tomcat启动后无法访问,一看日志报了一个PermGen空间不足的error,后来重新设置了一下就好了。原因可能是加了很多依赖jar包导致PermGen空间不足了。当时没有再多想。加载类信息以及静态常量是启动的时候一把加载进来?还是执行的过程中用到哪个类的时候再加载?如果不是一把加载进来,为什么tomcat启动后就报空间不足?
    2)关于集合容器中元素导致的内存泄露问题,看了老师的文章我觉得如果map在方法中定义应该问题不大,但如果map是类的属性或者是一个静态属性的话就要小心了。不用元素一定要记得remove,或者可以使用弱引用的集合容器。
    展开
     1
     3
  • 我爱布丁
    2019-11-22
    老师,第一讲中谈到当操作系统载入编译后程序时,会在内存中建立进程,划分代码段,堆,栈等。那么当操作系统运行JAVA虚拟机加载类文件时,在虚拟机中的Java堆,栈是否会直接map到JAVA虚拟机进程的堆,栈呢?从操作系统看一个JAVA虚拟机进程,和一个普通的编译后程序进程结构上有区别吗?

    作者回复: 虚拟机内部的堆和栈不会map到操作系统的堆和栈,这样才能跨平台。

    操作系统看JVM就是一个普通进程。

     2
     3
  • Solomon
    2019-11-23
    老师你好
    1.为什么新生代要设置3个区域呢?只有from和to不行吗?
    2.多线程执行的时候,栈帧在栈上如何分配空间的,是分多个java栈吗?

    作者回复: 1 因为一个对象在from和to之间多次拷贝,然后才会放入老年代。
    2 每个线程有自己的线程栈。

     2
     2
  • 乘坐Tornado的线程魔...
    2019-11-22
    操作系统处理线程栈这个场景是不是可以想象成,高并发场景下,每一个请求都要压入操作系统的线程栈,请求返回后,执行这个请求的线程才能从操作系统的线程栈中出栈?

    作者回复: 每个线程有自己的线程栈,用来管理方法的局部变量。而线程本身的管理不需要用栈。

    事实上,线程是使用线程池管理的,请求到来,就到线程池中申请分配一个空闲线程,请求处理完,线程放回到空闲线程池中。

    
     2
  • y欧尼酱
    2019-11-22
    老师能多讲讲类加载吗,这儿只知道jvm加载class字节码,在深入就不懂了,谢谢老师。
     1
     1
  • 乘坐Tornado的线程魔...
    2019-11-22
    老师好,有关JVM运行前的编译过程,请问HotSpot编译器和IDEA编译器的区别是什么?
     1
     1
  • Caliven
    2019-12-14
    看完第一节在看这一节有种恍然大悟的感觉
    
    
  • Paul Shan
    2019-12-05
    Java虚拟机是操作系统之上的操作系统:
    操作系统是加载可执行文件执行,JVM是加载class文件执行。操作系统可以调度进程和线程,JVM主要调度线程。操作系统有堆栈作为存储,JVM也有堆栈,而且还可以回收堆中的内存。另外一个角度讲操作系统是jvm的基础,jvm是操作系统运行的众多进程之一,jvm屏蔽了操作系统的底层细节,才得以跨平台的
    
    
  • 探索无止境
    2019-12-02
    老师,那老年代和年轻代各自用什么样的垃圾回收算法和垃圾回收器?
     1
    
  • vega
    2019-12-01
    1.8之后好像xms参数不能用了。似乎g1之后还有一两个新的垃圾回收器吧
    
    
  • miracle
    2019-11-23
    虽然这个对象被放置在堆中,但是这个对象不会被其他线程访问到,也是线程安全的。

    请问下,多个线程都可以访问这个方法,进而可以操作堆中的对象,为什么是线程安全的

    作者回复: 每个线程都可以访问这个方法,如果在这个方法内创建一个对象,那么就意味着“每个”线程都会“自己”创建一个对象。线程之间不会访问彼此的对象。

     3
    
  • 尹宗昌
    2019-11-22
    老师,之前看到,MySQL connector-j 驱动在特定模式下(useCompression=true)的内存泄漏问题。能简单提个思路,这样也能循序渐进
    
    
我们在线,来聊聊吧