मैं कक्षा गतिशील पैदा करते हैं और लोड यहJava8 metaspace और ढेर उपयोग
import javassist.CannotCompileException;
import javassist.ClassPool;
public class PermGenLeak {
private static final String PACKAGE_NAME = "com.jigarjoshi.permgenleak.";
public static void main(String[] args) throws CannotCompileException, InterruptedException {
for (int i = 0; i < Integer.MAX_VALUE; i++) {
ClassPool pool = ClassPool.getDefault();
pool.makeClass(PACKAGE_NAME + i).toClass();
Thread.sleep(3);
}
}
}
मैं जावा 7 (jdk1.7.0_60) के खिलाफ इस वर्ग का शुभारंभ किया और उम्मीद के रूप में यह PermGenSpace भरा और ढेर अप्रयुक्त बने रहे के लिए इस कोड है छवि permgen उपयोग अतिरिक्त समय पता चलता है और अंत JVM पर
अब एक ही कोड जावा 8 (jdk1.8.0_40-EA) के खिलाफ दौड़ा समाप्त किया गया है और उम्मीद के रूप में यह देशी स्मृति (Metaspace) लेकिन आश्चर्यजनक रूप से के लिए विस्तार हो रहा रखा मेटास्पैस के 1 जी ने ओल्डजेन (एल्मोस) में 3 जी ढेर का सेवन किया Metaspace की टी 3x समय)
छवि दिखाता Metaspace उपयोग अतिरिक्त समय और सिस्टम स्मृति के उपयोग नमूना
this email from Jon Masamitsu और this JEP ticket कहते
प्रशिक्षु
String
और कक्षा आँकड़े और कुछ विविध डेटा है से अधिक बनाए रखा ढेर
ढेर में इस वृद्धि को वास्तव में क्या बनाता है क्योंकि यह मेटास्पेस में अधिक कक्षाएं लोड करता है?
में क्यों नहीं देखा धन्यवाद एंड्री, मुझे बस इसे निष्पादित करना चाहिए था, मुझे लगता है कि मैं जावा 7 में इस पैमाने पर नहीं पहुंच पाया था इसलिए मैंने इसे जावा 7 में नहीं देखा –