diff --git a/java/jvm_balloon.cc b/java/jvm_balloon.cc index 62d77acc20e6f08b32dcf4ecc4f98f1d7cd76b62..1d588b0483aee0b022883107e3b9bb91e90beabf 100644 --- a/java/jvm_balloon.cc +++ b/java/jvm_balloon.cc @@ -34,6 +34,7 @@ public: size_t size() { return _balloon_size; } size_t move_balloon(unsigned char *dest, unsigned char *src); private: + void conciliate(unsigned char *addr); unsigned char *_jvm_addr; unsigned char *_addr; unsigned char *_jvm_end_addr; @@ -72,18 +73,23 @@ static ssize_t recent_jvm_heap() return curr - last_jvm_heap_memory.exchange(curr); } -ulong balloon::empty_area() +void balloon::conciliate(unsigned char *addr) { + _jvm_addr = addr; _jvm_end_addr = _jvm_addr + _balloon_size; _addr = align_up(_jvm_addr, _alignment); _end = align_down(_jvm_end_addr, _alignment); +} +ulong balloon::empty_area() +{ return mmu::map_jvm(_addr, hole_size(), this); } balloon::balloon(unsigned char *jvm_addr, jobject jref, int alignment = mmu::huge_page_size, size_t size = balloon_size) : _jvm_addr(jvm_addr), _jref(jref), _alignment(alignment), _balloon_size(size) { + conciliate(_jvm_addr); assert(mutex_owned(&balloons_lock)); balloons.push_back(this); }